Tôi đã có một lớp cơ sở tương thích với tuần tự hóa XML và một lớp dẫn xuất có triển khai thực hiện IXmlSerializable.C# Xml-Tuần tự hóa một lớp dẫn xuất sử dụng IXmlSerializable
Trong ví dụ này, các lớp cơ sở không thực hiện 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());
}
}
}
này tạo ra sản lượng này:
<?xml version="1.0" encoding="utf-16"?><Bar><fooProp>42</fooProp></Bar>
Tuy nhiên, tôi muốn sử dụng một lớp cơ sở mà không không triển khai IXmlSerializable. Điều này ngăn không cho sử dụng base.Read/WriteXml
. Kết quả sẽ là:
<?xml version="1.0" encoding="utf-16"?><Bar />
Có cách nào để nhận kết quả mong muốn không?
Đến từ Java và nó dễ dàng chết serialization, tôi là một chút buồn khi nghe điều này. Tôi thực sự tạo ra lớp cơ sở, mà tôi may mắn có quyền truy cập, triển khai thực hiện IXmlSerializable. Nó hoạt động, nhưng nó rất đau, bởi vì tôi đang viết mã mà không được cho là tồn tại. – mafu
Trừ khi có ai đó đưa ra một cách tiếp cận mới, đây là câu trả lời chính thức. – mafu