[英]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.