如何使用具有公共基类的GSON反序列化JSON

时间:2015-12-31 10:23:15

标签: android serialization gson retrofit2

我有一个看起来像这样的json

{
    user:{
            name:abc
            email:a@bc.com
            .....    
          }
    responseCode:1
    responseMessage:Done
}

我正在使用GSON转换器的Retrofit 2。 2个参数 每个JSON中都会出现 responseCode responseMessage 。区分参数是“用户”

所以我创建了一个类

class BaseResponse {
    public int responseCode;
    public String responseMessage; 
}

然后POJOS的其余部分扩展如下:

class User extends BaseResponse {
    public String name;
    public String email;
}

问题是,GSON没有反序列化“用户”部分。 我想我必须写一个解串器

return new JsonDeserializer<T>() {
            @Override
            public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                    throws JsonParseException {

                JsonObject jsonObject  = json.getAsJsonObject();
                int        messageCode = jsonObject.get("responseCode").getAsInt();

                if (messageCode == 1) {
                    **// What do I do now?**
                }

                return null;
            }
        };

问题是,GSON返回User对象,用户对象元素全为null。

我有点像修复。无论如何这有可能吗?要么通过JsonObject jo = json.getAsJsonObject().getAsJsonObject("user");或父母来获得子类的东西。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您只需要创建这3个类,然后就不需要编写反序列化器。

public abstract class BaseResponse {
    public int responseCode;
    public String responseMessage; 
}

public class UserResponse extend BaseResponse {
    private User user;
}

public class User {
    private String name;
    private String email; 
}

然后你只说Call<UserResponse> listRepos(@Path("user") String user);