2014-09-24 71 views
3

以下是序列化JSON數組我要轉換爲IDictionary如何將下面的JSON數組轉換爲IDictionary <string,object>?

[ 
    { 
    "8475": 25532 
    }, 
    { 
    "243": 521 
    }, 
    { 
    "3778": 15891 
    }, 
    { 
    "3733": 15713 
    } 
] 

當我試圖用

JsonConvert.DeserializeObject<IDictionary<string, object>>((string)jarray); 

我得到了一個錯誤說:

無法施展 'jarray' (其具有'Newtonsoft.Json.Linq.JArray'的實際類型)到'字符串'

JSON解串器只需要一個字符串。

+3

括號內的數組?這是有效的JSON? – 2014-09-24 12:45:45

+3

如果你已經有一個'JArray'實例,那你爲什麼要轉換成一個字符串來轉換回一些JSON.NET類型來轉換爲'IDictionary'? (並且你不能反序列化到一個接口,它必須是一個具體類型。) – Richard 2014-09-24 12:46:16

+0

爲什麼你不使用jarray調用'ToString()'方法,如果你真的想要一個字符串呢? – 2014-09-24 12:53:53

回答

5

如果你已經有JArray,你所要做的就是把它轉換成字典,我猜。

大致是這樣的:

IDictionary<string,object> dict = jarray.ToDictionary(k=>((JObject)k).Properties().First().Name, v=> v.Values().First().Value<object>()); 

Check this for complete code with an example

我覺得可能是一個更好的方式將其轉換爲一個字典雖然。我會繼續尋找。

1

JsonConvert.DeserializeObject<T>方法以一個JSON ,換言之一個序列對象。
你有一個反序列化的對象,所以你必須首先序列化它,這實際上是毫無意義的,因爲你在JArray對象中有你需要的所有信息。如果您的目標只是將陣列中的對象作爲鍵值對,則可以這樣做:

Dictionary<string, object> myDictionary = new Dictionary<string, object>(); 

foreach (JObject content in jarray.Children<JObject>()) 
{ 
    foreach (JProperty prop in content.Properties()) 
    { 
     myDictionary.Add(prop.Name, prop.Value); 
    } 
} 
相關問題