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

时间:2015-10-26 15:10:37

标签: 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 lib来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用cutom deserializer

来完成

如果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);