Xml fundición a clase heredada
-
23-09-2019 - |
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 ??
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