使用XmlSerializer序列化衍生類別
在使用XmlSerializer時,序列化包含抽象基底類別泛型清單的物件可能會帶來挑戰。本文探討如何解決這個問題。
問題:
包含衍生類別清單(List)的對象,其中衍生類別是抽象的,在反序列化過程中可能導致InvalidOperationException異常。
解:
為了成功序列化派生對象,可以使用三種方法:
程式碼範例:
以下程式碼示範了三種方法:
<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中文網其他相關文章!