您可以
JsonDeserializer在将Json值解析为Java实例时实现并使用它。我将尝试通过一个代码向您展示这个想法:
1)定义您的自定义
JsonDeserializer类,该类通过传入的json值的id属性创建不同的类实例:
class MyTypeModelDeserializer implements JsonDeserializer<MybaseTypeModel> { @Override public MybaseTypeModel deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObject = json.getAsJsonObject(); JsonElement jsonType = jsonObject.get("type"); String type = jsonType.getAsString(); MybaseTypeModel typeModel = null; if("type1".equals(type)) { typeModel = new Type1Model(); } else if("type2".equals(type)) { typeModel = new Type2Model(); } // TODO : set properties of type model return typeModel; }}2)为您的Java对象的不同实例定义基类:
class MybaseTypeModel { private String type; // TODO : add other shared fields here}3)定义不同的Java对象类实例,以扩展您的基类:
class Type1Model extends MybaseTypeModel { // TODO: add specific fields for this class}class Type2Model extends MybaseTypeModel { // TODO: add specific fields for this class}4)在将json值解析为bean时使用这些类:
GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(MybaseTypeModel.class, new MyTypeModelDeserializer());Gson gson = gsonBuilder.create();MybaseTypeModel myTypeModel = gson.fromJson(myJsonString, MybaseTypeModel.class);
我目前无法测试,但希望您能理解。另外,此链接将非常有帮助。



