Json.Net多態性子物件序列化,無需"$type"欄位
在使用Json.Net進行物件序列化的場景中,一個常見的需求是在父類別中表示多態性子物件。雖然Json.Net的TypeNameHandling.Auto設定簡化了此任務,但它會引入一個"$type"欄位來指示子物件的類型。出於各種原因,這可能是不可取的。
挑戰
挑戰在於如何在不依賴"$type"欄位的情況下辨識子物件的類型。一種方法是將類型資訊作為指示器儲存在父類別中,如提供的範例程式碼所示。但是,這會帶來與可存取性和資料管理相關的限制。
解
為了解決這些限制,一個更有效的解決方案是將子類型資訊直接作為屬性添加到基類中。這允許在序列化可分配給基類的物件時序列化子類型枚舉。在反序列化期間,可以使用自訂JsonConverter將JSON資料載入到臨時物件中,根據「Type」屬性確定合適的子類,並相應地執行反序列化。
實作細節
實作涉及建立自訂SubType枚舉和一個將類型對應到子類型的字典。 SubTypeClassBase基底類別包含一個Type屬性,該屬性利用字典傳回子類型。
SubTypeClassConverter類別充當負責反序列化的JsonConverter。它檢查JSON物件中的「Type」屬性,取得對應的子類型,並填入現有或新實例的對應子類別。
透過採用這種方法,您可以使用Json.Net序列化和反序列化多態性子對象,而無需引入"$type"字段,從而確保資料表示的靈活性和可控制性。
以上是如何在沒有「$type」欄位的情況下序列化 Json.Net 中的多態性子物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!