如何将下面的JSON数组转换为IDictionary ?
问题描述:
以下是序列化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解串器只需要一个字符串。
答
如果你已经有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
我觉得可能是一个更好的方式将其转换为一个字典虽然。我会继续寻找。
答
的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);
}
}
括号内的数组?这是有效的JSON? – 2014-09-24 12:45:45
如果你已经有一个'JArray'实例,那你为什么要转换成一个字符串来转换回一些JSON.NET类型来转换为'IDictionary'? (并且你不能反序列化到一个接口,它必须是一个具体类型。) – Richard 2014-09-24 12:46:16
为什么你不使用jarray调用'ToString()'方法,如果你真的想要一个字符串呢? – 2014-09-24 12:53:53