首頁 > 後端開發 > C++ > 如何使用 Json.net 在 C# 中序列化和反序列化派生類型?

如何使用 Json.net 在 C# 中序列化和反序列化派生類型?

Mary-Kate Olsen
發布: 2025-01-21 18:41:08
原創
658 人瀏覽過

How to Serialize and Deserialize Derived Types in C# with Json.net?

使用Json.net序列化和反序列化派生類型

在C#中使用多態繼承時,Json.net (Newtonsoft)需要特殊處理才能正確地序列化和反序列化衍生型別。本文探討如何透過啟用類型名稱處理來實現這一點。

問題

考慮以下類別層次結構:

<code class="language-csharp">public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}</code>
登入後複製

現在,如果您嘗試反序列化包含Base物件清單的JSON字串,但實際上它包含Derived對象,則您將無法恢復派生類型資訊。如何解決這個問題?

解答

Json.net提供TypeNameHandling選項,該選項啟用類型名稱的序列化和反序列化。要使用此功能:

  1. 建立一個JsonSerializerSettings物件並將TypeNameHandling設定為TypeNameHandling.All。
  2. 將此設定物件作為參數傳遞給SerializeObject和DeserializeObject方法。

以下是一個範例:

<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>
登入後複製

這種方法確保Json.net在序列化期間保留類型訊息,並在反序列化期間恢復它,從而允許正確恢復派生類型。

以上是如何使用 Json.net 在 C# 中序列化和反序列化派生類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板