我有一個與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 2009-02-09 17:00:15
除非有人想出一個新的方法,這是正式的答案。 – mafu 2009-02-10 14:54:03