Csharp/C#教程:使用XmlSerializer序列化派生类分享


使用XmlSerializer序列化派生类

我正在使用XMLSerializer来序列化包含通用列表的对象

List Children {get;set}

问题是每个元素都派生自ChildBase ,而ChildBase实际上是一个抽象类。 当我尝试反序列化时,我得到一个invalidOperationException

有没有办法可以将XMLSerializer与派生对象一起使用? 谢谢。

有三种方法可以做到这一点; 您可以对该类型使用[XmlInclude] ,也可以对该属性使用XmlElement / XmlArrayItem 。 它们都显示在下面; 取消注释您喜欢的那对:

 using System; using System.Collections.Generic; using System.Xml.Serialization; public class MyWrapper { //2: [XmlElement("A", Type = typeof(ChildA))] //2: [XmlElement("B", Type = typeof(ChildB))] //3: [XmlArrayItem("A", Type = typeof(ChildA))] //3: [XmlArrayItem("B", Type = typeof(ChildB))] public List Data { get; set; } } //1: [XmlInclude(typeof(ChildA))] //1: [XmlInclude(typeof(ChildB))] public abstract class ChildClass { public string ChildProp { get; set; } } public class ChildA : ChildClass { public string AProp { get; set; } } public class ChildB : ChildClass { public string BProp { get; set; } } static class Program { static void Main() { var ser = new XmlSerializer(typeof(MyWrapper)); var obj = new MyWrapper { Data = new List { new ChildA { ChildProp = "abc", AProp = "def"}, new ChildB { ChildProp = "ghi", BProp = "jkl"}} }; ser.Serialize(Console.Out, obj); } } 

您可以使用XmlIncludeAttribute 。 或者以另一种方式看这篇文章。

上述就是C#学习教程:使用XmlSerializer序列化派生类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1028173.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐