Gson解析为覆盖变量的子类
Gson parse to subclass that overrides variable
我想做出一些响应 POJO classes,我将从我的网络服务器收到这些响应。
我的网络服务器总是return一个json这个结构:
{
'data':Object or array or null,
'status':Integer,
'message':String or null
}
这是基本响应:
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; }
}
然后我有一个 'real' 回复 class:
public class LoginResponse extends BaseResponse {
private UserData data;
@Override
public UserData getData() { return data; }
}
UserData
是另一个 class,看起来与这些完全相同,但变量名称(id 和名称)不同。
我尝试像这样解析响应:
try {
LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
Log.i(PF.TAG, "ID: " + json.getData().getName());
}
但是它在 fromJson() 上抛出一个异常说:
LoginResponse declares multiple JSON fields named data
如何解决此问题并在 BaseResponse
中保留数据变量?
您可以使用泛型类型。
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 可以是您想要的任何对象。
我想做出一些响应 POJO classes,我将从我的网络服务器收到这些响应。
我的网络服务器总是return一个json这个结构:
{
'data':Object or array or null,
'status':Integer,
'message':String or null
}
这是基本响应:
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; }
}
然后我有一个 'real' 回复 class:
public class LoginResponse extends BaseResponse {
private UserData data;
@Override
public UserData getData() { return data; }
}
UserData
是另一个 class,看起来与这些完全相同,但变量名称(id 和名称)不同。
我尝试像这样解析响应:
try {
LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
Log.i(PF.TAG, "ID: " + json.getData().getName());
}
但是它在 fromJson() 上抛出一个异常说:
LoginResponse declares multiple JSON fields named data
如何解决此问题并在 BaseResponse
中保留数据变量?
您可以使用泛型类型。
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 可以是您想要的任何对象。