C# 反序列化IXmlSerializable结构层次结构
我有以下情况:C# 反序列化IXmlSerializable结构层次结构,c#,xml,struct,deserialization,hierarchy,C#,Xml,Struct,Deserialization,Hierarchy,我有以下情况: public struct Foo : IXmlSerializable { public Bar bar; } public struct Bar : IXmlSerializable { } 我希望能够从XML序列化/反序列化Foo。WriteXml方法非常容易实现: public void WriteXml(XmlWriter writer) { writer.WriteStartElement("bar"); this.bar.WriteXml
public struct Foo : IXmlSerializable
{
public Bar bar;
}
public struct Bar : IXmlSerializable
{
}
我希望能够从XML序列化/反序列化Foo。WriteXml方法非常容易实现:
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("bar");
this.bar.WriteXml(writer);
writer.WriteEndElement();
}
但是我对如何编写ReadXml方法感到迷茫
public void ReadXml(XmlReader reader)
{
reader.MoveToContent();
????
reader.ReadEndElement();
}
首先,我是否需要实例化一个新的Bar实例来调用ReadXml
其次,如何编写ReadXml方法,使它们“堆叠”?我希望能够将我的读者传递给一个孩子,而不必担心它会以不合适的状态返回
谢谢您在
Foo
中的WriteXml
方法没有正确实现。您应该调用XmlSerializer
来序列化Bar
实例,而不是手动调用其WriteXml
:
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("bar");
new XmlSerializer(typeof(Bar)).Serialize(writer, bar);
writer.WriteEndElement();
}
首先,我是否需要实例化一个新的Bar实例来调用ReadXml
否。相反,使用XmlSerializer
并调用其反序列化
方法,类似于上面的序列化示例
其次,如何编写ReadXml方法,使它们“堆叠”?我希望能够将我的读者传递给一个孩子,而不必担心它会以不合适的状态返回
对。默认情况下,它是这样工作的。您不必执行任何特殊操作来维护状态,只需传递读取器
/编写器
实例。只需递归地使用XmlSerializer
即可(反)序列化嵌套的复杂对象
注意:有一个很好的教程