我應該考慮合同解析器,如果我使用自定義JSON轉換器?序列化使用ContractResolver和JsonConverter(JSON.NET)
我經歷了一個問題,當合同解析器永遠不會被調用,由於自己的JSON轉換器...
如果我應該做的..又是什麼做的常見方式?我無法找到有關的任何信息......
我應該考慮合同解析器,如果我使用自定義JSON轉換器?序列化使用ContractResolver和JsonConverter(JSON.NET)
我經歷了一個問題,當合同解析器永遠不會被調用,由於自己的JSON轉換器...
如果我應該做的..又是什麼做的常見方式?我無法找到有關的任何信息......
傳遞一個JsonConverter到SerializeObject或DeserializeObject 提供了一種簡單的方法來徹底改變物體是如何 序列化。然而,有少量的開銷;每個值都會調用 CanConvert方法來檢查是否應該由該JsonConverter處理 序列化。有幾種方法可以繼續使用JsonConverters,而無需任何開銷。 最簡單的方法是使用 JsonConverterAttribute指定JsonConverter。該屬性告訴序列化程序在序列化和反序列化類型時始終使用該轉換器, 沒有檢查。
但
如果你要轉換的類不是你自己的,你是無法 使用屬性,JsonConverter仍然可以通過創建您自己的 使用IContractResolver。
沒有一個[MCVE]我們不能真正幫助你。只是猜測,如果你的問題是名稱與名稱映射一個'JsonConverter'衝突的'ContractResolver'是硬編碼,你可以1)通過'serializer.ContractResolver.ResolveContract(的objectType).Properties'和返回的屬性環路檢查任一['JsonProperty.UnderlyingName'](http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_Serialization_JsonProperty_UnderlyingName.htm)或['PropertyName'](http://www.newtonsoft.com/json/help /html/P_Newtonsoft_Json_Serialization_JsonProperty_PropertyName.htm)酌情或 – dbc
.. 2)使用['JsonSerializer.Populate()'](http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonSerializer_Populate.htm)來填充構件爲此您需要默認的反序列化,如圖所示在[這個答案](https://stackoverflow.com/a/41512702/3744182)。 – dbc
這是個好主意:「serializer.ContractResolver.ResolveContract(objectType).Prop erties」。但它不工作在我的具體情況...我正在閱讀JSON動態,所以objectType是System.Object它沒有屬性。我想ResolveContract是James如何計劃它被使用的方式..但是如果你想在數據轉換器中擁有非常自定義的邏輯,它看起來是不可能的。我會進一步調查。 – Maxim