Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ReadXml()内部使用XmlSerializer_C#_.net_Xml_Serialization_Xml Serialization - Fatal编程技术网

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);
这是我们想要的方法吗?有没有更好的方法来做到这一点,而不创建额外的读者