我在.NET中有一个实现IXmlSerializable的类。我想序列化它的属性,但它们可能是复杂的类型。这些复杂类型与XML序列化兼容,但它们本身并不实现IXmlSerializable。从我的ReadXml和WriteXml方法,我如何调用传递给我的XmlReader / XmlWriter上的默认读/写逻辑。
也许代码会让我更清楚我想要的东西:
public class MySpecialClass : IXmlSerializable
{
public List<MyXmlSerializableType> 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<MyXmlSerializableType>)
reader.ReadObject(typeof(List<MyXmlSerializableType>));
}
void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
{
// Write MyList to writer, but how?
// Something like this?
// writer.WriteObject(MyList)
}
}
答案 0 :(得分:10)
对于编写者,您可以为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)。