假设接收以下 JSON 数据:
{
"request" : "connection_status",
"data" : { "id" : "foo", "username" : "bar" }
}
并且您想将其反序列化为一个 Java 对象,其类定义如下:
public class SingleJsonObjectRequest {
private String request;
private Object data;
public String getRequest() {
return request;
}
public void setRequest(String request) {
this.request = request;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
显然,您甚至有以下类(class):
public class UserInfo {
private String id;
private String username;
public String getId() {
return id;
}
public UserInfo setId(String id) {
this.id = id;
return this;
}
public String getUsername() {
return username;
}
public UserInfo setUsername(String username) {
this.username = username;
return this;
}
}
可以通过调用将其包含到 SingleJsonObjectRequest 中:
singleObjReq.setData(new UserInfo());
有什么方法可以将该 JSON 数据转换为 SingleJsonObjectRequest 对象吗?我的意思是,您不能使用以下代码:
SingleJsonObjectRequest singleObjReq = gson.fromJson(jsonReq, SingleJsonObjectRequest.class);
因为 SingleJsonObjectRequest 有一个通用的数据对象,而不是 UserInfo 对象。
最佳答案
您可以编写自定义反序列化器 ( https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Deserializer )。
恕我直言,您必须为要发送/接收的每种数据类型使用单独的类。您可以创建一个像这样的通用基类
class JsonRequest<T>{
private String request;
private T data;
public String getRequest() {
return request;
}
public void setRequest(String request) {
this.request = request;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
并为每种类型使用子类,因为java不存储泛型类型信息 例如
class UserInfoRequest extends JsonRequest<UserInfo>{
//nothing in here
}
关于java - 使用GSON将JSON数据转换为Java对象(包括Object类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064418/