使用Json.net反序列化衍生型別
假設您有一個基底類別Base
和一個衍生類別Derived
,其中Derived
繼承自Base
。您有一個Base
物件的列表,其中包含Base
和Derived
的實例。當您反序列化此清單的JSON表示形式時,您希望將派生類型檢索為其實際類型,而不僅僅是作為Base
物件。
為了實現這一點,Json.net提供了一個稱為型別名稱處理的功能。透過啟用此功能並將其作為設定參數傳遞給序列化和反序列化操作,您可以指定物件類型應包含在序列化的JSON中。
<code class="language-csharp">Base object1 = new Base() { Name = "Object1" }; Derived object2 = new Derived() { Something = "Some other thing" }; List<Base> inheritanceList = new List<Base>() { object1, object2 }; JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string Serialized = JsonConvert.SerializeObject(inheritanceList, settings); List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>
反序列化後,deserializedList
將包含正確類型的Base
和Derived
物件。但是,啟用類型名稱處理有一個缺點:它會將所有物件和清單的名稱包含在序列化的JSON中,這在某些情況下可能並不理想。
以上是如何使用 Json.net 反序列化基本類型和派生類型清單並保留其實際類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!