如何将以下JSON数组转换为IDictionary<;字符串,对象>;

本文关键字:字符串 lt gt 对象 IDictionary JSON 转换 数组 | 更新日期: 2023-09-27 18:24:28

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

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

当我尝试使用时

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

我得到一个错误说:

无法将"jarray"(其实际类型为"Newtonsoft.Json.Linq.jarray")强制转换为"string"

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

如何将以下JSON数组转换为IDictionary<;字符串,对象>;

如果您已经有了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