xmlelement sharp serialize serializar deserializar array c# xml-serialization

c# - sharp - Usando XmlSerializer para serializar clases derivadas



xml array serialization c# (2)

Hay tres maneras de hacer esto; o puede usar [XmlInclude] contra el tipo, o puede usar XmlElement / XmlArrayItem contra la propiedad. Todos ellos se muestran a continuación; descomenta el par que prefieras:

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<ChildClass> 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<ChildClass> { new ChildA { ChildProp = "abc", AProp = "def"}, new ChildB { ChildProp = "ghi", BProp = "jkl"}} }; ser.Serialize(Console.Out, obj); } }

Estoy usando XMLSerializer para serializar un objeto que contiene una lista genérica

List <ChildBase> Children {get;set}

El problema es que cada elemento deriva de ChildBase que de hecho es una clase abstracta. Cuando intento deserializar, obtengo una excepciónOperationException inválida

¿Hay alguna manera de usar XMLSerializer con objetos derivados? Gracias.