How to handle deserializing with polymorphism?

前端 未结 4 547
既然无缘
既然无缘 2020-11-27 17:04

I have a class like:

public class Barn {
    String type;
    Animal animal;
}

public class Horse extends Animal {
}

public class Cow extends Animal {
}
         


        
4条回答
  •  离开以前
    2020-11-27 17:28

    You could use Gson Fire for this. The code would look something like this:

    GsonFireBuilder builder = new GsonFireBuilder()
        .registerTypeSelector(Barn.class, new TypeSelector() {
            @Override
            public Class getClassForElement(JsonElement readElement) {
                String type = readElement.getAsJsonObject().get("type").getAsString();
                if(type.equals("horse")){
                    return Horse.class; 
                } else if(type.equals("cow")) {
                    return Cow.class;
                } else {
                    return null; //returning null will trigger Gson's default behavior
                }
            }
        });
    Gson gson = builder.createGson();
    

提交回复
热议问题