繁体   English   中英

JSON 数组到 C# 字典

[英]JSON array to C# Dictionary

我如何转换这样的 JSON数组

[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]

到带有 json.net 或系统类的 C# 字典。

json.net 可以直接序列化为字典,前提是您将其提供给对象而不是数组。

也许转换为 KeyValuePairs 数组会有所帮助

using System.Linq;

var list = JsonConvert.DeserializeObject<IEnumerable<KeyValuePair<string, string>>>(jsonContent);
var dictionary = list.ToDictionary(x => x.Key, x => x.Value);

对于任何感兴趣的人 - 这也有效:

示例 JSON:

[{"device_id":"VC2","command":6,"command_args":"test args10"}, {"device_id":"VC2","command":3,"command_args":"test args9"} ]

C#:

JsonConvert.DeserializeObject<List<JObject>>(json)
            .Select(x => x?.ToObject<Dictionary<string, string>>())
            .ToList()

其实很简单:

假设您将 json 放入如下字符串中:

string jsonString = @"[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]";

然后你可以使用 JSON.NET 反序列化它,如下所示:

JArray a = JArray.Parse(jsonString);

// dictionary hold the key-value pairs now
Dictionary<string, string> dict = new Dictionary<string, string>();

foreach (JObject o in a.Children<JObject>())
{
    foreach (JProperty p in o.Properties())
    {
        string name = p.Name;
        string value = (string)p.Value;
        dict.Add(name,value);
    }
}

我发现使用 KeyValuePairs 列表不起作用。 我得到了正确数量的元素,但它们的键和值是空的。

最后,唯一对我有用的解决方案是反序列化为字典列表(每个字典都有一个 kvp 元素)。

数据必须按如下方式发送(格式):

"Values": [
  {"Key" : "abc"  , "Value": 23.14},
  {"Key" : "abc1" , "Value": 23.11},
  {"Key" : "abc2" , "Value": 23.17},
  {"Key" : "abc3" , "Value": 23.19}
]

因此,转换过程将起作用。 在我尝试从 JSON 转换为dictionary<string,decimal>它对我来说效果很好

由于您只能从对象中反序列化,因此可以通过先操作 JSON 字符串来实现这一点。 将它包装在一个对象中:

json = String.Format("{{\"result\":{0}}}", json);

暂无
暂无

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

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