2012-09-25 66 views
3

我有一個生成以下JSON的REST WCF服務。如何從Android的WCF服務中反序列化複雜的JSON對象?

{ 
    "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 
     } 
     } 
    ] 
} 

我該如何反序列化android手機與gson庫?

我懷疑問題是「__type」:「客戶端:#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; 
+0

這篇文章的答案可以幫助你嗎? http://stackoverflow.com/questions/12197138/how-to-parse-inner-json-objects-arrays/12197186#12197186 –

+0

不是。我使用gson,我的類有屬性@SerializedName。 – GENiALi

+0

答案也適用於gson,並且該示例還具有@SerializedName屬性......您是否也可以發佈您正在發出請求並處理響應的類? –

回答

1

改變從WCF註釋:

BodyStyle = WebMessageBodyStyle。

到:

BodyStyle = WebMessageBodyStyle。 WrappedRequest

這種變化的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;