我有这个 JSON 模型:
{
state (int),
result (object)
}
result
可能包含以下模型之一:
public class Person {
someField;
}
public class Book {
someOtherFields;
}
我的意思是,我正在寻找一种方法来做到这一点:
if(result.state == 1)
then deserialize result as a Person
else if(result.state == 2)
then deserialize result as a Book
else throw exception;
我不是 JAVA 或 Android 专家。这只是我陷入的糟糕情况。你知道如何通过在 Android 应用程序中使用 GSON 库来做到这一点吗?
最佳答案
你可以使用自定义反序列化器来做到这一点
如果 Book
和 Person
有一个名为 Element
的父类,您可以创建这个反序列化器(未测试)
public class LatLngDeserializer implements JsonDeserializer<Element> {
@Override
public Element deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
JsonObject jobject = json.getAsJsonObject();
int state = jobject.get("state").getAsInt();
if(state == 1)
return new Person();
else if (state == 2)
return new Book();
else
throw new Exception();
}
}
然后使用
注册它GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Element.class, new CustomDeserializer());
Gson gson = gsonBuilder.create();
然后使用
解析Element element= gson.fromJson(jsonInput, Element.class);
关于java - 根据另一个字段的值有条件地反序列化一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349153/