以下是我要转换为IDictionary
[
{
"8475": 25532
},
{
"243": 521
},
{
"3778": 15891
},
{
"3733": 15713
}
]
当我尝试使用
时JsonConvert.DeserializeObject<IDictionary<string, object>>((string)jarray);
我收到错误说:
无法施放&#39; jarray&#39; (其实际类型为&#39; Newtonsoft.Json.Linq.JArray&#39;)至&#39;字符串&#39;
JSON反序列化器只需要一个字符串。
答案 0 :(得分:7)
如果您已经拥有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 :(得分: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);
}
}
答案 2 :(得分:0)
要将JArray
转换为字符串,您需要为每个元素分配字典的键和值。马里奥给出了一种非常准确的方法。但是,只要您知道如何将每个项目转换为所需的类型,就有一种更漂亮的方法。以下示例适用于Dictionary<string, string>
,但可以应用于任何Value
类型。
//Dictionary<string, string>
var dict = jArray.First() //First() is only necessary if embedded in a json object
.Cast<JProperty>()
.ToDictionary(item => item.Name,
item => item.Value.ToString()); //can be modified for your desired type