【发布时间】:2014-02-03 10:05:50
【问题描述】:
当我从 WS 获得结果时,我使用 GSON lib 反序列化我的对象。例如,我的 Web 服务响应包含:
"id" : "myid"
"code" : 200
"data" : can be anything (String, JSONObject, JSONArray...)
所以这里是我的课:
public class MyClass
{
private Object id;
private int code;
private Object data;
private String type;
public MyClass()
{
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
public Object getId()
{
return id;
}
public void setId(Object id)
{
this.id = id;
}
public int getCode() {
return code;
}
public Object getData() {
return data;
}
public void setCode(int code) {
this.code = code;
}
public void setData(Object data) {
this.data = data;
}
}
如您所见,我不知道“数据”会是哪种类型的数据,所以我在这里使用了 Object 类型。
所以当我得到回复时,我会使用:
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
并用这个方法来转换我的类:
public <T> T deserialize(Type pClass, JSONObject pJsonObject)
{
try
{
return gson.fromJson(pJsonObject.toString(), pClass);
}
catch (JsonSyntaxException e)
{
}
return null;
}
一切正常。但我有一个小问题。 “数据”字段可以是所有内容(字符串、整数、JSONObject,...),对于我的示例,当我在这里得到结果时,数据是 JSONObject。所以“数据”(即Object)是一个JSONObject,但在这里自动转换为LinkedTreeMap而不是JSONObject,所以当我想解析“数据”时,我有一个CastException:/
所以这里真正的问题是,如果用户已将 JSONObject 发送到 API,并且当我调用 Web 服务时得到此结果,GSON 会将此 JSONObject 转换为 LinkedTreeMap,但我想检索已发送的相同类型由用户。
有可能吗?
谢谢大家!
J.
【问题讨论】:
标签: android deserialization gson