JSON数组到字典
Posted
技术标签:
【中文标题】JSON数组到字典【英文标题】:JSON array to Dictionary 【发布时间】:2020-07-12 22:12:06 【问题描述】:我正在尝试使用 NewtonsoftJson 将 JSON 反序列化为 C# 对象。
我的 json 看起来像这样:
"something" : [ "key1" : "value1", "key2" : "value2"]
但这不是一个完整的 json。所以它应该是大物体的一部分。 我不能使用这个解决方案JSON array to C# Dictionary 因为我用
JsonConvert.DeserializeObject<MyObject>(json);
可以这样初始化对象吗?
public class Something
[JsonProperty]
public Dictionary<string, string> MyDictionary;
但是当我尝试这样做时,我得到了异常:
Newtonsoft.Json.JsonSerializationException: '无法反序列化 当前 JSON 数组(例如 [1,2,3])转换为类型 'System.Collections.Generic.Dictionary`2[System.String,ConsoleApp4.TxPerfMeasurements]' 因为该类型需要一个 JSON 对象(例如 "name":"value") 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 "name":"value")或将反序列化类型更改为 实现集合接口的数组或类型(例如 ICollection, IList) 之类的可以从 JSON 反序列化的 List 大批。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。
【问题讨论】:
这不是有效的 JSON,你可以在这里试试jsonformatter.curiousconcept.com 那不是有效的 JSON,你能确保你没有在这里歪曲实际问题吗?您所展示的示例的问题是您不能拥有一个键值对数组,这是一个对象。所以它要么必须是一个元素数组,在这种情况下冒号不应该在那里,要么它必须是一个对象,在这种情况下它应该使用...
而不是[...]
。使用当前的示例数据,无论您尝试将其反序列化为何种类型,都无法让 Json.Net 反序列化它。请确保您有正确的输入示例。
对不起,我忘了刹车,实际上是这样的:"something":["key1":"value1","key2":"value2"]跨度>
【参考方案1】:
输入
"something": [
"key1": "value1" ,
"key2": "value2"
]
您的模型应如下所示
public class Something
public List<Dictionary<string, string>> something get; set;
使用 Linq 转换为 Dictionary
var result = JsonConvert.DeserializeObject<Something>(json);
var dict = result.something.SelectMany(d => d).ToDictionary(e => e.Key, e => e.Value);
输出
【讨论】:
以上是关于JSON数组到字典的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器