I have a class like:
public class Barn {
String type;
Animal animal;
}
public class Horse extends Animal {
}
public class Cow extends Animal {
}
>
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 extends Barn> 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();