3

我有一个生成以下 JSON 的 REST WCF 服务。

{
   "RecordsUpdateResult":[
      {
         "ID":115,
         "Crud":2,
         "Data":{
            "__type":"Client:#PIT.Library.AndroidClasses",
            "ID":115,
            "Adress":"str. 1",
            "City":"Luzern",
            "Description":"Client 115",
            "PostalCode":6000
         }
      },
      {
         "ID":128,
         "Crud":2,
         "Data":{
            "__type":"Client:#PIT.Library.AndroidClasses",
            "ID":128,
            "Adress":"",
            "City":"",
            "Description":"Client 128",
            "PostalCode":0
         }
      }
   ]
}

如何使用 gson 库在 android 手机上反序列化它?

我怀疑问题出在"__type":"Client:#PIT.Library.AndroidClasses"。我在 Android 端有一个名为“Client”的类。

我想将此 JSON 反序列化为以下类。

public class StammdatenUpdate extends ObjectBase
{
    @SerializedName("Crud")
    private CRUD    crud;
    @SerializedName("Data")
    private Object  data;

    @Override
    public String getSha1Hash()
    {
        // TODO Auto-generated method stub
        return null;
    }

    public synchronized CRUD getCrud()
    {
        return crud;
    }

    public synchronized void setCrud(CRUD crud)
    {
        this.crud = crud;
    }

    public synchronized Object getData()
    {
        return data;
    }

    public synchronized void setData(Object data)
    {
        this.data = data;
    }
}

属性 ID 在基类中。

    ...
    Type listType = new TypeToken<ArrayList<StammdatenUpdate>>()
        {}.getType();
    Gson gson = new GsonBuilder().create();

    // List<StammdatenUpdate> RecordsUpdate(StammdatenType type, Dictionary<long, string> listWithHashes)
    postData.setParameter(new String[] { "type", "listWithHashes" });
    postData.setValues(new String[] { gson.toJson(StammdatenType.CLIENT), gson.toJson(map) });

    String json = post.execute(postData);

    List<StammdatenUpdate> retValue = null;
    if(Tools.isNullOrEmpty(json) == false)
    {

        retValue = gson.fromJson(json, listType);
    }

    return retValue;
4

1 回答 1

1

从以下位置更改 WCF 注释:

BodyStyle = WebMessageBodyStyle。包裹

至:

BodyStyle = WebMessageBodyStyle。包裹请求

这将 JSON 更改为:

   {
       "RecordsUpdateResult":[
          {
             "ID":115,
             "Crud":2,
             "Data":{

至:

[
          {
             "ID":115,
             "Crud":2,
             "Data":{

并且反序列化工作正常。

    Type listType = new TypeToken<ArrayList<StammdatenUpdate>>()
        {}.getType();
    Gson gson = new GsonBuilder().create();

    List<StammdatenUpdate> retValue = null;
    if(Tools.isNullOrEmpty(json) == false)
    {
        retValue = gson.fromJson(json, listType);
    }

    return retValue;
于 2012-09-25T10:01:42.910 回答