在處理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中文網其他相關文章!