将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的
Posted
技术标签:
【中文标题】将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的【英文标题】:Deserializing JSON to C# class where property names in the JSON are dynamic 【发布时间】:2021-11-06 06:49:40 【问题描述】:我正在使用 JSON.NET 包来反序列化对 C# 类的 JSON 响应,但 json 的格式很奇怪。他们正在发回一个项目数组,其中每个项目的名称属性都设置为 ID(很奇怪,因为正如您在下面看到的,ID 已经作为“player_id”出现在对象的主体中)。像这样:
"5131":
"player_id": 5131,
"prop1": "val1",
"prop2": null,
"prop3": "val3"
,
"5132":
"player_id": 5132,
"prop1": "val1",
"prop2": null,
"prop3": "val3"
通常您会有一个名称-值对,其中名称是标准的“玩家”,并且您会将 id 作为对象中的属性。
有没有办法围绕它定义一个 C# 类,它将反序列化为我需要的东西(只是一个项目数组,没有动态命名的 id 道具)。谢谢
【问题讨论】:
您可以使用Dictionary<string, PROPCLASS>
和PROPCLASS
作为定义属性的新类。
这能回答你的问题吗? json deserialization to C#
【参考方案1】:
由于每个对象都有一个与对象键值匹配的player_id
,因此您无需担心捕获对象键。我只是先将其序列化为字典,然后从该字典中获取值。
var players = JsonConvert.DeserializeObject<Dictionary<string, Player>>(input).Values;
【讨论】:
啊,当然,太简单了:)谢谢!以上是关于将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的的主要内容,如果未能解决你的问题,请参考以下文章
使用 JsonConvert.DeserializeObject 将 Json 反序列化为 C# POCO 类