您可以实现 a 并在将 Json 值解析为 Java 实例时使用它。我将尝试用一个代码来展示它,这将给你一个想法:JsonDeserializer
1) 定义您的自定义类,该类通过传入 json 值的 id 属性创建不同的类实例:JsonDeserializer
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);
我现在不能测试它,但我希望你明白这个想法。此外,此链接将非常有帮助。