在处理JSON数据时,经常会遇到既有已知字段也有未知字段的情况。已知字段可以映射到类中的特定属性,而未知字段需要特殊处理以避免数据丢失。
管理未知字段的一种方法是利用JSON .NET中的自定义契约解析器。但是,实现这一点可能具有挑战性。
DataContract序列化程序不允许覆盖反序列化,因此不适合这种情况。
序列化和反序列化到动态对象可以提供解决方案,但这是一个繁琐的过程,并且涉及后期处理。
从DynamicObject类继承也不能解决问题,因为序列化程序依赖于反射,并且不会为动态对象调用自定义方法。
与其使用复杂的技术,不如考虑JSON .NET(5.0及以上版本)中的JsonExtensionDataAttribute
。此属性允许将未知字段匿名存储在IDictionary<string, JToken>
类型的属性中。
<code class="language-csharp">public class Product { public string id { get; set; } public string name { get; set; } [JsonExtensionData] public Dictionary<string, JToken> UnknownFields { get; set; } }</code>
使用这种方法,JSON数据将成功反序列化,并且可以通过类实例访问已知和未知字段。
以上是在 .NET 中反序列化期间如何处理已知和未知的 JSON 字段?的详细内容。更多信息请关注PHP中文网其他相关文章!