2016-08-21 23 views
0

一些背景:我的json數據來自查詢mysql數據庫的php腳本。我有一個類的命令的結果,如成功或失敗。我有另一個類將包含查詢的實際結果。如何從統一反序列化json.net中獲取多個/嵌套類的返回值?

public class jsonResults { 
    public int success { get; set; } 
    public string message { get; set; } 
    public ArrayList resultArray { get; set; } 
} 

public class HeroDetails { 
    public int id { get; set; } 
    public string name { get; set; } 
} 

我想我應該可以遍歷結果的ArrayList來填充新HeroDetails的jsonResults但我似乎無法找到如何。

例如JSON數據

{ 
    "success": 1, 
    "message": "Data Available!", 
    "resultArray":[ 
     { "id": "26", "name": "Hero1" }, 
     { "id": "13", "name": "Hero2" }, 
     { "id": "1", "name": "Hero3" }, 
     { "id": "18", "name": "Hero4" } 
    ] 
} 

此代碼讓我獲得成功和消息,但我沒有找到任何辦法讓數組結果到我的名單。

 List<HeroDetails> heroList = new List<HeroDetails>(); 
     jsonResults r = JsonConvert.DeserializeObject<jsonResults>(json)); 

     Debug.Log("Success: " + r.success); 
     Debug.Log("Message: " + r.message); 
+1

只要改變'公共的ArrayList resultArray'爲'公開名單 resultArray' –

+0

它並不總是要HeroDetails那我回去,雖然。 jsonResult用於我需要的任何json。 – Sym

回答

2

您的JSON響應可以包含通用數據,因此您需要一個通用結果類。

public class jsonResults<T> { 
    public int success { get; set; } 
    public string message { get; set; } 
    public List<T> resultArray { get; set; } 
} 

此外,您還必須知道您希望從請求反序列化它的類型。

jsonResults<HeroDetails> r = JsonConvert.DeserializeObject<jsonResults<HeroDetails>>(json); 
+0

這就是我想念的東西。正如我現在需要的那樣工作。謝謝! – Sym

2

你在你的數組列表中有問題!你可以使用json2csharp

public class ResultArray 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 

public class RootObject 
{ 
    public int success { get; set; } 
    public string message { get; set; } 
    public List<T> resultArray { get; set; } 
} 
+0

ResultArray類將改變。這並不總是那樣。我需要一種方法來創建一個通用數組,然後我可以將它們提供給我獲取數據的任何類。 – Sym

+0

你可以使用泛型類型T.我修改了我的答案! –

+0

我以前使用json2csharp,但它沒有註冊它可以幫助解決這個問題。儘管Rufo爵士打敗了你。我已經接受他作爲答案。謝謝您的幫助! – Sym