首頁 > 後端開發 > C++ > 如何使用 XmlSerializer 序列化抽象基底類別的衍生型別清單?

如何使用 XmlSerializer 序列化抽象基底類別的衍生型別清單?

Linda Hamilton
發布: 2025-01-11 09:47:42
原創
963 人瀏覽過

How Can I Serialize a List of Abstract Base Class's Derived Types Using XmlSerializer?

使用XmlSerializer序列化衍生類別

在使用XmlSerializer時,序列化包含抽象基底類別泛型清單的物件可能會帶來挑戰。本文探討如何解決這個問題。

問題:

包含衍生類別清單(List)的對象,其中衍生類別是抽象的,在反序列化過程中可能導致InvalidOperationException異常。

解:

為了成功序列化派生對象,可以使用三種方法:

  1. 使用[XmlInclude]: 此屬性可以指定序列化時要包含的衍生型別。適用於派生型別數量較少的情況。
  2. 使用XmlElement/XmlArrayItem: 這些屬性可以直接指定與屬性關聯的衍生型別。較適用於派生型別數量較多的情況。

程式碼範例:

以下程式碼示範了三種方法:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Xml.Serialization;

// 方法一:使用 [XmlInclude]
[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 方法二:使用 XmlElement
public class MyWrapper {
    [XmlElement("ChildA", Type = typeof(ChildA))]
    [XmlElement("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

// 方法三:使用 XmlArrayItem
public class MyWrapper2 {
    [XmlArrayItem("ChildA", Type = typeof(ChildA))]
    [XmlArrayItem("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

public class ChildA : ChildClass {
    public string AProp { get; set; }
}

public class ChildB : ChildClass {
    public string BProp { get; set; }
}</code>
登入後複製

透過取消所需屬性對的註釋,您可以選擇最適合您需求的解決方案。

以上是如何使用 XmlSerializer 序列化抽象基底類別的衍生型別清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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