首页 >后端开发 >C++ >如何使用 Newtonsoft.Json.Net 在 JSON 中反序列化具有动态数字键名称的子对象?

如何使用 Newtonsoft.Json.Net 在 JSON 中反序列化具有动态数字键名称的子对象?

Barbara Streisand
Barbara Streisand原创
2025-01-13 19:00:43201浏览

How to Deserialize Child Objects with Dynamic Numeric Key Names in JSON using Newtonsoft.Json.Net?

使用 Newtonsoft.Json.Net 反序列化具有动态数字键名的子对象

反序列化具有动态键名的 JSON 数据可能具有挑战性,尤其是在键为数字时。以下是使用 Newtonsoft.Json.Net 解决此问题的方法。

提供的 JSON 结构包含一个父级“users”对象,其中包含已知和未知属性。为了适应未知属性,需要一个自定义转换器。

自定义转换器

TypedExtensionDataConverter 类是一个自定义 JSON 转换器,用于处理具有动态属性的对象的反序列化。它确保未知属性反序列化到一个类型化容器中,在本例中为 User 对象的字典。

该转换器使用 JsonTypedExtensionDataAttribute 属性来标识应包含动态数据的属性。

修改后的类定义

为了使用自定义转换器,“Users”和“User”类被修改为包含属性和转换器。

Users 类:

<code>[JsonConverter(typeof(TypedExtensionDataConverter<Users>))]
class Users
{
    ...
    [JsonTypedExtensionData]
    public Dictionary<string, User> UserTable { get; set; }
}</code>

User 类保持不变。

使用方法

使用自定义转换器和修改后的类定义,可以按如下方式执行反序列化:

<code>string json = @"...与之前相同的 JSON...";

RootObject root = JsonConvert.DeserializeObject<RootObject>(json);</code>

Users 对象中的 UserTable 属性现在将包含反序列化的 User 对象,从而可以访问其数据。

结论

通过使用自定义 JSON 转换器,可以反序列化具有动态数字键名的子对象,从而可以无缝处理复杂的 JSON 结构。

以上是如何使用 Newtonsoft.Json.Net 在 JSON 中反序列化具有动态数字键名称的子对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn