【问题标题】:C# deserialize Json with ID nodes [duplicate]C#反序列化带有ID节点的Json [重复]
【发布时间】:2021-09-06 04:17:05
【问题描述】:

如何将 Json 反序列化为具有节点键 ID 的 C# 对象?例如:

{
  "people" : {
    "1": {
       "firstname": "jim",
       "lastname": "brown"
    },
    "2": {
       "firstname": "kathy",
       "lastname": "jones"  
    }
  }
}

将序列化到这个 C# 类中

public class JsonRoot {
   public List<Person> People { get; set; }
}

public class Person {
   public int Id { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

是否可以使用自定义通用转换器或 json 属性来做到这一点?

【问题讨论】:

标签: asp.net json asp.net-core json.net system.text.json


【解决方案1】:

因为你的 json 数据中没有数组,所以这个 List 不会给出解决方案。

可以使用字典,这也是两级。第一个字典只包含一个键=人,它的值也是字典,它的键是“1”和“2”,值是人对象。

class Program
{
    static string jsonData = @"{
                          ""people"" : {
                            ""1"": {
                               ""firstname"": ""jim"",
                               ""lastname"": ""brown""
                            },
                            ""2"": {
                               ""firstname"": ""kathy"",
                               ""lastname"": ""jones""  
                            }
                          }
                        }
                        ";
    static void Main(string[] args)
    {
        var datatextjson = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, Person>>>(jsonData);
        Console.WriteLine("Hello World!");
    }

    public class Person
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
    }
}

【讨论】:

  • Newtonsoft.Json.JsonConvert.DeserializeObject -- 问题是关于system.text.json 而不是json.net
  • 已更正,几乎相同。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多