【问题标题】:JSON array to DictionaryJSON数组到字典
【发布时间】: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"}]}跨度>

标签: c# arrays json dictionary json.net


【解决方案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);

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多