C#反序列化带有ID节点的Json [重复]
Posted
技术标签:
【中文标题】C#反序列化带有ID节点的Json [重复]【英文标题】:C# deserialize Json with ID nodes [duplicate] 【发布时间】: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 属性来做到这一点?
【问题讨论】:
将List<Person>
替换为Dictionary<string, Person>
。
见:Query or deserialize json with dynamic keys using System.Text.Json,看起来是重复的,同意吗?还是您需要将 JSON 对象反序列化为列表?
您也许可以在 .NET 5 中使用 Dictionary<int, Person>
,请参阅 devblogs.microsoft.com/dotnet/whats-next-for-system-text-json/…: Support non-string dictionary keys。
您的 Json 字符串和类不匹配。 people
是一个对象/字典,其键是数字,其值没有 Id
属性。您必须使用 matching 类对其进行反序列化,然后将它们映射到您想要的类
Dictionary因为你的 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。
已更正,几乎相同。以上是关于C#反序列化带有ID节点的Json [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]
使用 LitJson 在 C# 中反序列化 JSON 对象数组 [重复]