首頁 > 後端開發 > C++ > 如何在保留型別資訊的同時反序列化 JSON.NET 中的衍生型別?

如何在保留型別資訊的同時反序列化 JSON.NET 中的衍生型別?

Mary-Kate Olsen
發布: 2025-01-21 18:46:14
原創
678 人瀏覽過

How Can I Deserialize Derived Types in JSON.NET While Preserving Type Information?

Json.net派生型態反序列化

在處理JSON資料時,序列化和反序列化遵循基底類別-衍生類別關係的物件可能很有優勢。但是,Json.net(Newtonsoft)需要特定的配置才能有效地處理派生類型。

問題:

考慮以下基底類別和衍生類別:

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

如果您嘗試將包含基底類別和衍生類別物件的JSON字串反序列化為List<Base>,您只會得到基底類別對象,從而遺失衍生型別資訊。

解:

要成功反序列化派生類型,您需要啟用類型名稱處理。這可以透過建立一個JsonSerializerSettings物件並將TypeNameHandling屬性設為All來實現。將此設定物件傳遞給序列化和反序列化操作:

<code>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字串中包含型別資訊。在反序列化期間,它將使用此資訊正確地重新建立派生物件並填充deserializedList

注意: 使用此方法會在序列化資料中公開所有物件的名稱以及清單本身。如果這是個問題,請考慮處理多態關係的替代方法。

以上是如何在保留型別資訊的同時反序列化 JSON.NET 中的衍生型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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