У меня есть базовый класс, который совместим с сериализацией XML и производным классом, который реализует IXmlSerializable.C# Xml-Сериализация производного класса с использованием IXmlSerializable
В этом примере базовый класс делает реализации 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());
}
}
}
Это производит этот выход:
<?xml version="1.0" encoding="utf-16"?><Bar><fooProp>42</fooProp></Bar>
Однако, я хотел бы использовать базовый класс, который делает не реализовать IXmlSerializable. Это предотвращает использование base.Read/WriteXml
. Результат будет:
<?xml version="1.0" encoding="utf-16"?><Bar />
Есть ли способ получить желаемый результат?
Исходя из Java, и это мертвая простая сериализация, мне немного грустно слышать это. Я фактически сделал базовый класс, к которому я, к счастью, имею доступ, реализую IXmlSerializable. Он работает, но это как-то больно, потому что я пишу код, который не должен существовать. – mafu
Если кто-то не придумает новый подход, это официальный ответ. – mafu