Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-GSON lib-Object反序列化对象_Android_Deserialization_Gson - Fatal编程技术网

Android-GSON lib-Object反序列化对象

Android-GSON lib-Object反序列化对象,android,deserialization,gson,Android,Deserialization,Gson,当我从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 S

当我从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;
    }
}
public <T> T deserialize(Type pClass, JSONObject pJsonObject)
    {
        try
        {
            return gson.fromJson(pJsonObject.toString(), pClass);
        }
        catch (JsonSyntaxException e)
        {

        }

        return null;
    }
如您所见,我不知道“data”是哪种类型的数据,所以我在这里使用了对象类型

因此,当我得到响应时,我使用:

GsonBuilder gsonBuilder = new GsonBuilder();        
Gson gson = gsonBuilder.create();
并使用此方法转换我的类:

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;
    }
}
public <T> T deserialize(Type pClass, JSONObject pJsonObject)
    {
        try
        {
            return gson.fromJson(pJsonObject.toString(), pClass);
        }
        catch (JsonSyntaxException e)
        {

        }

        return null;
    }
public T反序列化(类型pClass,JSONObject-pJsonObject)
{
尝试
{
返回gson.fromJson(pJsonObject.toString(),pClass);
}
捕获(JsonSyntaxException e)
{
}
返回null;
}
一切正常。但是我有一个小问题。“数据”字段可以是所有内容(字符串、整数、JSONObject等),例如,当我在这里得到结果时,数据就是JSONObject。因此,“数据”(即对象)是一个JSONObject,但在此自动转换为LinkedTreeMap,而不是JSONObject,因此当我想解析“数据”时,我有一个CastException:/

因此,这里真正的问题是,如果用户向API发送了一个JSONObject,并且我在调用web服务时得到了这个结果,那么GSON会将这个JSONObject转换为LinkedTreeMap,但我想检索用户发送的相同类型

可能吗

谢谢大家


J.

您可以添加一个通用模型类,其中“数据”将是字符串或Json对象

如果您明确知道“数据”将是什么,这将很有帮助,例如,它将是一个json对象..然后:(或者可以将其保留为字符串,然后检查代码并相应地映射它)

并且可以在模型类中使用Gson lib中的注释:

@SerializedName("responseVariableStringHere")  
private String responseVariable;
那么

modelClassObject = gson.fromJson(responseContentString,ModelClass.class);  
此后,

JsonObject job = modelClassObject.getData();  
并重复映射过程。这一次使用“data”响应的模型类对象

objectFromData = gson.fromJson(job.get("tagfromtheJsonObject"), ObjectFromData.class);
可以避免写以下内容:

public <T> T deserialize(Type pClass, JSONObject pJsonObject)
public T反序列化(类型pClass,JSONObject-pJsonObject)