反序列化具有动态键名的 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中文网其他相关文章!