Tengo una clase base que es compatible con la serialización XML y una clase derivada que implementa IXmlSerializable.C# Xml-Serializar una clase derivada utilizando IXmlSerializable
En este ejemplo, la clase base no implementar IXmlSerializable:
using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace XmlSerializationDerived
{
public class Foo
{
public int fooProp;
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
fooProp = int.Parse (reader.ReadElementString ("fooProp"));
}
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString ("fooProp", fooProp.ToString());
}
}
public class Bar : Foo, IXmlSerializable
{
public new void ReadXml(XmlReader reader)
{
base.ReadXml (reader);
}
public new void WriteXml(XmlWriter writer)
{
base.WriteXml (writer);
}
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create (sb);
Bar bar = new Bar();
bar.fooProp = 42;
XmlSerializer serializer = new XmlSerializer (typeof (Bar));
serializer.Serialize (writer, bar);
Debug.WriteLine (sb.ToString());
}
}
}
Esto produce esta salida:
<?xml version="1.0" encoding="utf-16"?><Bar><fooProp>42</fooProp></Bar>
Sin embargo, me gustaría utilizar una clase base que hace no implementar IXmlSerializable. Esto evita el uso de base.Read/WriteXml
. El resultado será:
<?xml version="1.0" encoding="utf-16"?><Bar />
¿Hay alguna forma de obtener el resultado deseado?
Viniendo de Java y su serialización es fácil, estoy un poco triste por escuchar esto. De hecho, hice la clase base, que por suerte tengo acceso, implementamos IXmlSerializable. Funciona, pero duele, porque estoy escribiendo código que no debería existir. – mafu
A menos que a alguien se le ocurra un nuevo enfoque, esta es la respuesta oficial. – mafu