2014-10-07 81 views
0

我有以下的JSON:我如何反序列化這本詞典<字符串,字符串[]>

[ 
    { 
     "Key": "tradepack", 
     "Value": [ 
      "Select Tradepack" 
     ] 
    }, 
    { 
     "Key": "route", 
     "Value": [ 
      "Select Route" 
     ] 
    }, 
    { 
     "Key": "recall", 
     "Value": [ 
      "Select Recall Location" 
     ] 
    }, 
    { 
     "Key": "stones", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "quickstep", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "dreamingdonkey", 
     "Value": [ 
      "True" 
     ] 
    }, 
    { 
     "Key": "meleeskills", 
     "Value": [] 
    }, 
    { 
     "Key": "rangedskills", 
     "Value": [] 
    }, 
    { 
     "Key": "buffedskills", 
     "Value": [] 
    } 
] 

即時通訊目前採用這種

String data = System.IO.File.ReadAllText(Application.StartupPath + "\\folder\\Data\\Config\\config.txt"); 
return JsonConvert.DeserializeObject<Dictionary<string, object[]>>(data); 

,但我得到以下錯誤

無法反序列化當前的JSON數組(例如[1,2,3])爲類型'System.Collections.Generic.Dictionary`2 [System.String,System.Object []]',因爲該類型需要JS ON對象(例如{「name」:「value」})來正確反序列化。 要解決此錯誤,請將JSON更改爲JSON對象(例如{「name」:「value」})或將反序列化類型更改爲實現集合接口(例如ICollection,IList)的數組或類型,如List可以從JSON數組中反序列化。 JsonArrayAttribute也可以添加到類型中,以強制它從JSON數組反序列化。 路徑「」,1號線,位置1

有人在乎爲我將如何解決這個即時通訊在C#尤其是系列化

回答

-1

您的數據看起來更像是一個KeyValuePair<string, string[]>[]。你可以嘗試反序列化,然後根據結果創建一個字典。

var kvps = JsonConvert.DeserializeObject<KeyValuePair<String, String[]>[]>(data); 
return kvps.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); 
3

您的JSON是一個數組/列表對於新手解釋。所以,你需要反序列化到這樣的事情List<Dictionary<string, object>>

var data = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json); 

OR

var dict = JArray.Parse(json) 
      .Select(x => x.ToObject<KeyValuePair<string, string[]>>()) 
      .ToDictionary(x => x.Key, x => x.Value); 
+5

@Downvoter,有什麼評論?因爲我在發佈之前對它進行了測試,並且在給出有問題的json的情況下工作。 – EZI 2014-10-07 21:05:37

相關問題