JSON.NET 5中的架構變更
Newtonsoft 對 JSON.NET 進行了兩個架構升級,以使其能夠更容易地在涉及第三方庫的項目中使用。這兩個特性是默認設置和擴展數據。
在 JSON.NET 5r5中,開發者可以使用 JsonSerializerSettings 類重寫序列化/反序列化選項。每次調用 JsonConvert 方法的時候通常都會將它作為參數傳入,或者用它創建新的 JsonSerializer。
如果類庫想要使用新的默認模式,那么可以使用 JsonSerializer.CreateDefault 方法。這樣便會使用應用通過 JsonConvert.DefaultSettings 方法定義的默認項。如果類庫不想使用此行為,那么可以繼續正常地創建 JsonSerializer 的實例。
應該注意的是,JsonConvert.DefaultSettings 方法的參數是一個 Func<JsonSerializerSettings>而不是 JsonSerializerSettings 的實例。這意味著每次需要的時候都將創建默認 JsonSerializerSettings 的一個新副本。
另一個變化是對擴展數據的支持。這些數據在原生 JSON 有效負荷中有效,但不會在類結構中出現。一般來說,這會在服務器定義發生改變而客戶端尚未升級到匹配版本時發生。
在 WCF 中,可以通過 IExtensibleDataObject 接口獲取擴展數據。它為 ExtensionDataObject 類型提供了一個單獨的屬性,一個幾乎沒有什么作用的不透明類。ExtensionDataObject 包含的任何數據只對數據協定序列化器有效。這意味著,它只在極其特殊的情況下才會發揮作用,例如我們將一些數據序列化,使用舊版本的代碼將其反序列化,重新序列化,接下來再次使用原始版本反序列化的情況。
JSON.Net 將擴展數據以字串和 JToken 對象字典的形式暴露。該字典通過使用 [JsonExtensionData]屬性標記的屬性或域對外暴露。通過使用屬性而不是接口,開發者可以將域標記為私有以維持封裝。
英文原文:Architectural Changes in JSON.NET 5