C# 如何从ReadXml()内部使用XmlSerializer
我试图理解如何使用C# 如何从ReadXml()内部使用XmlSerializer,c#,.net,xml,serialization,xml-serialization,C#,.net,Xml,Serialization,Xml Serialization,我试图理解如何使用XmlSerializer从外部类的ReadXml()方法中反序列化嵌套类的实例。我遇到的是对XmlSerializer.Deserialize()的嵌套调用会导致跳过节点 XML文档如下所示: <outerType> <innerType id="1">structure</innerType> <innerType id="2">structure</innerType> <other
XmlSerializer
从外部类的ReadXml()
方法中反序列化嵌套类的
实例。我遇到的是对XmlSerializer.Deserialize()
的嵌套调用会导致跳过节点
XML文档如下所示:
<outerType>
<innerType id="1">structure</innerType>
<innerType id="2">structure</innerType>
<otherElement />
</outerType>
public void ReadXml(System.Xml.XmlReader reader)
{
while (reader.Read())
{
if (reader.Name == "innerType")
{
XmlSerializer innerSer = new XmlSerializer(typeof(InnerType));
InnerType obj = (InnerType)innerSer.Deserialize(reader);
}
else
// Do some other logic
}
}
第一次通过循环时,type变量接收
元素中包含的结构。但是循环从未遇到
元素
在调试器中使用此功能之后,我相信发生的情况是,在调用innerSer.Deserialize()
之前,reader指向
的开始标记,然后,它立即指向
的开始标记。在循环的顶部,对XmlReader.Read()
的调用将reader
前进到下一个元素,并且永远不会读取
我看到的一些反序列化对象集合的解决方案建议如下:
XmlSerializer innerSer = new XmlSerializer(typeof(InnerType));
InnerType obj1 = (InnerType)innerSer.Deserialize(reader);
InnerType obj2 = (InnerType)innerSer.Deserialize(reader);
但在我的特殊情况下,我需要处理
InnerType的实例
我发现可以工作的是创建第二个XmlReader,其中包含InnerType
子树的副本,如中所示:
XmlSerializer innerSer = new XmlSerializer(typeof(InnerType));
XmlReader subTree = reader.ReadSubtree();
InnerType obj = (InnerType)innerSer.Deserialize(subTree);
这是我们想要的方法吗?有没有更好的方法来做到这一点,而不创建额外的读者