Gson解析为覆盖变量

时间:2015-12-15 14:45:50

标签: java json class gson pojo

我想做一些我将从网络服务器收到的POJO课程。

我的网络服务器将始终返回此结构中的json:

{
    'data':Object or array or null,
    'status':Integer,
    'message':String or null
}

这是BaseResponse:

public class BaseResponse {
    private Object data;
    private int status;
    private String message;

    public Object getData() { return this.data; }
    public int getStatus() { return this.status; }
    public String getMessage() { return this.message; }
}

然后我有一个'真正'的回应类:

public class LoginResponse extends BaseResponse {
    private UserData data;

    @Override
    public UserData getData() { return data; }
}

UserData是另一个看起来与这些类似但具有不同变量名称(id和name)的类。

我尝试解析这样的响应:

try {
    LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
    Log.i(PF.TAG, "ID: " + json.getData().getName());
}

但它在fromJson()上抛出一个异常,说:

  

LoginResponse声明了多个名为data

的JSON字段

如何解决这个问题,并且仍然在BaseResponse

中有数据变量

1 个答案:

答案 0 :(得分:1)

您可以使用泛型类型。

public class BaseResponse<T> {

    private T data;
    private int status;
    private String message;

    public T getData(){
        return this.data;
    }

    public int getStatus(){
        return this.status;
    }

    public String getMessage(){
        return this.message;
    }
}

示例响应类型:

public class LoginResponse extends BaseResponse<UserData>{

}

然后你可以使用:

LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
Log.i(PF.TAG, "ID: " + json.getData().getName());

使用此方法,T可以是您想要的任何对象。