java - 根据另一个字段的值有条件地反序列化一个字段

标签 java android json gson

我有这个 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 库来做到这一点吗?

最佳答案

你可以使用自定义反序列化器来做到这一点

如果 BookPerson 有一个名为 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/

相关文章:

java - Strange if 行为的解释

android - fragment 中的蓝牙启用 Intent

android - 后台同步删除的 ListView 中的 Realm 对象导致崩溃

php - JSON 数据作为字符串 >> 创建对象来访问数据?

json - angularjs $http.error 无状态返回 json

java - 指定的目标目录不存在

java - 使用 Servlet 创建超链接

java - 返回 jsoup 中 div 之间的文本

java - Android 应用程序 - 连接到 Google Cloud SQL

javascript - 如果某些脚本删除了先前加载或包含的脚本,那么异步加载 webapps 会发生什么?