如何在自定义XML序列化方法中使用默认XML序列化

我在.NET中有一个实现IXmlSerializable的类。 我想序列化它的属性,但它们可能是复杂的类型。 这些复杂类型与XML序列化兼容,但它们本身并不实现IXmlSerializable。 从我的ReadXml和WriteXml方法,我如何调用传递给我的XmlReader / XmlWriter上的默认读/写逻辑。

也许代码会让我更清楚我想要的东西:

public class MySpecialClass : IXmlSerializable { public List MyList { get; set; } System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema() { return null; } void IXmlSerializable.ReadXml(System.Xml.XmlReader reader) { // Read MyList from reader, but how? // Something like this? // MyList = (List) reader.ReadObject(typeof(List)); } void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) { // Write MyList to writer, but how? // Something like this? // writer.WriteObject(MyList) } } 

对于编写者,您可以为MySerializableType创建一个XmlSerializer,然后通过它将列表序列化到您的编写器。

 void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) { // write xml decl and root elts here var s = new XmlSerializer(typeof(MySerializableType)); s.Serialize(writer, MyList); // continue writing other elts to writer here } 

读者有类似的方法。 编辑 :要读取列表,并在列表完成后停止读取,但在流结束之前,您需要使用ReadSubTree (信用Marc Gravell)。