Ho una classe base che è compatibile con la serializzazione XML e una classe derivata che implementa IXmlSerializable.C# Xml-Serializzazione di una classe derivata utilizzando IXmlSerializable
In questo esempio, la classe di base attui 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());
}
}
}
Questo produce questo output:
<?xml version="1.0" encoding="utf-16"?><Bar><fooProp>42</fooProp></Bar>
Tuttavia, vorrei usare una classe base che fa non implementare IXmlSerializable. Ciò impedisce l'utilizzo di base.Read/WriteXml
. Il risultato sarà:
<?xml version="1.0" encoding="utf-16"?><Bar />
C'è un modo per ottenere ancora il risultato desiderato?
Provenendo da Java ed è una serializzazione facile, sono un po 'triste sentirlo. Ho effettivamente realizzato la classe base, che per fortuna ho accesso, implementare IXmlSerializable. Funziona, ma mi fa male, perché sto scrivendo un codice che non dovrebbe esistere. – mafu
A meno che qualcuno non presenti un nuovo approccio, questa è la risposta ufficiale. – mafu