繁体   English   中英

如何将以下 JSON 数组转换为 IDictionary<string, object> ?

[英]How to convert the following JSON array into IDictionary<string, object>?

以下是我想转换为IDictionary的序列化 JSON 数组

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

当我尝试使用

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

我收到一条错误消息:

无法将“jarray”(其实际类型为“Newtonsoft.Json.Linq.JArray”)转换为“string”

JSON 反序列化器只需要一个字符串。

如果您已经拥有JArray ,那么您所要做的就是将其转换为我猜的字典。

大致是这样的:

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

用一个例子检查这个完整的代码

我认为可能有更好的方法将其转换为字典。 我会继续寻找。

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);
    }
}

要将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM