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

How to deserialize JSON using GSON with common base class

我有一个 json 看起来像这样

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

我正在使用带有 GSON 转换器的 Retrofit 2。 2个参数 responseCoderesponseMessage 出现在每个 JSON 中。区分参数是 "user"

所以我创建了一个 class

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

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

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

问题是,GSON 不会反序列化 "user" 部分。 我想我必须写一个 deserializer .

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 returns 我的用户 object 和用户 object 元素都是空的。

我有点陷入困境。无论如何这是可能的吗?我要么通过 JsonObject jo = json.getAsJsonObject().getAsJsonObject("user"); 或 parent 得到 child class 的东西。 任何帮助将不胜感激。

你只需要做这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);