【问题标题】:How to deserialize Json to a simple Dictionary如何将 Json 反序列化为简单的字典
【发布时间】:2021-10-08 07:06:04
【问题描述】:

我有一个像这样的 json 文件:

[
  {
    "Id": "Id1",
    "Value": "Value1"
  },
  {
    "Id": "Id2",
    "Value": "Value2"
  },
  {
    "Id": "Id3",
    "Value": "Value3"
  }
]

我需要将它移动到一个简单的 Dictionary(string, string) 并且 id 应该是键和值 - 值。

我可以修剪它并使用JsonDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);,但我认为应该有更简单的方法。

【问题讨论】:

  • 将其反序列化为具有Id和Value属性的对象列表,然后使用.ToDictionary转换为字典。

标签: c# json dictionary


【解决方案1】:
public class JsonItem
{
    public string Id;
    public string Value;
}

var result = JsonConvert.DeserializeObject<List<JsonItem>>(json).ToDictionary(k => k.Id, v => v.Value);

您可以在这里查看现场演示:https://dotnetfiddle.net/P8vONj

【讨论】:

    【解决方案2】:

    您可以使用以下简单命令来实现:

    var result = JArray.Parse(json).ToDictionary(token => token["Id"], token => token["Value"]);
    

    更新

    感谢@Jamiec 指出我的result 的类型是Dictionary&lt;JToken, JToken&gt;

    Dictionary<string, string> result = JArray.Parse(json)
        .ToDictionary(token => (string)token["Id"], token => (string)token["Value"]);
    

    【讨论】:

    • Newtonsoft.Json.Linq.JArray 是外部库的一部分
    • 就像JsonConvert :D
    • 它抛出错误:无法将类型'System.Collections.Generic.Dictionary'隐式转换为'System.Collections.Generic .Dictionary'
    • @PeterCsala 我认为这里的重点是您将其设为Dictionary&lt;JToken,JToken&gt;,它不能用于代替Dictionary&lt;string,string&gt;,即使您是对的,输出JToken 将产生字符串。制作字典时,您只需要在答案中添加一些ToString() 电话
    • 是的,更新有效。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多