2014-09-24 91 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); 
    } 
}