将 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 类

在调用API后,将JSON对象反序列化为C#类[重复]。

无法将 JSON 数组反序列化为 C# 对象 [关闭]

将json键值反序列化为字典c#

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

在 C# 中从 JSON 反序列化数组