Pregunta

Tengo 2 clases:

public class ClassA

public class ClassB (from another namespace) : ClassA

Tengo archivos XML se llenan de ClassA.

Como echarlo a ClassB mientras deserialización.

¿es posible ??

¿Fue útil?

Solución

I trató esta solución, la aplicación es decir, un elemento XmlRoot especificando el mismo nombre de elemento como el de ClassA.
Esto debería funcionar:

using System;
using System.IO;
using System.Xml.Serialization;

[XmlRoot("ClassA")]
public class ClassA {
    [XmlElement]
    public String TextA {
        get;
        set;
    }
}

[XmlRoot("ClassA")] // note that the two are the same
public class ClassB : ClassA {
    [XmlElement]
    public String TextB {
        get;
        set;
    }

}

class Program {
    static void Main(string[] args) {

        // create a ClassA object and serialize it
        ClassA a = new ClassA();
        a.TextA = "some text";

        // serialize
        XmlSerializer xsa = new XmlSerializer(typeof(ClassA));
        StringWriter sw = new StringWriter();
        xsa.Serialize(sw, a);

        // deserialize to a ClassB object
        XmlSerializer xsb = new XmlSerializer(typeof(ClassB));
        StringReader sr = new StringReader(sw.GetStringBuilder().ToString());
        ClassB b = (ClassB)xsb.Deserialize(sr);

    }
}

Otros consejos

No se puede emitir una clase base a una clase derivada -. Sólo se puede emitir clases derivadas de regreso a sus clases base (un solo sentido)

Al crear el XmlSerialiser, es necesario hacerlo desde su ClassB, será entonces deserialise como la clase que desea.

Sería válido para emitir una clase base como una instancia de una clase derivada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top