【问题标题】:How to deserialize Json to dictionary in c#如何在 C# 中将 Json 反序列化为字典
【发布时间】:2020-06-04 09:33:58
【问题描述】:

我有一个如下所示的 json 数组,其中包含两个键“entities”和“TotalResults”。在实体中有“字段”。我想获取“字段”中的元素,即“名称”和“值”。这样我就可以遍历 Fields 以找到匹配的 name 及其各自的 value。我已经尝试了大多数解决方案,似乎没有给出我想要的结果。任何帮助都会受到赞赏。

下面是 Json 数组:

{"entities": [
 {
"Fields": [
  {
    "Name": "test-id",
    "values": [
      {
        "value": "268"
      }
    ]
  },
  {
    "Name": "os-config",
    "values": [
      {}
    ]
  },
  {
    "Name": "pc-mobile-host",
    "values": [
      {}
    ]
  }
  }
  ],
  "TotalResults": 2}

我尝试过的代码如下(虽然我尝试了很多其他方法,但只提到了两个):

1.

Dictionary<string,object> Result= JsonConvert.DeserializeObject<Dictionary<string,object>>(json);

2.

  public class Fields
    {
        [JsonProperty("values")]
        public IList<object> values { get; set; }

        [JsonProperty("Name")]
        public string Name { get; set; }


    }
    public class RootObject
    {
        public IList<Fields> Fields { get; set; }
    }
    var Result = JsonConvert.DeserializeObject<RootObject>(json);

【问题讨论】:

  • 您的 JSON 格式不正确,请修复它
  • 嗨 Anikhouski,已修复

标签: c# json serialization


【解决方案1】:

首先(使用 Newtonsoft.Json)将 json 解析为 JObject,然后您可以使用 SelectToken 访问和迭代 Fields 对象。

编写此答案时您的 JSON 中仍然存在错误,因此我已将其修改为有效

var json = @"{""entities"":[{""Fields"":[{""Name"":""test-id"",""values"":[{""value"":""268""}]},{""Name"":""os-config"",""values"":[{}]},{""Name"":""pc-mobile-host"",""values"":[{}]}]}],""TotalResults"":2}";

var jObject = JObject.Parse(json);
var fields = jObject.SelectToken("$..Fields").ToList();

foreach (var field in fields)
{

}

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多