Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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# 如何在具有相同类型子节点的c中反序列化XML_C#_Xml_Xml Serialization_Xml Deserialization - Fatal编程技术网

C# 如何在具有相同类型子节点的c中反序列化XML

C# 如何在具有相同类型子节点的c中反序列化XML,c#,xml,xml-serialization,xml-deserialization,C#,Xml,Xml Serialization,Xml Deserialization,我需要反序列化下面的XML。chapter元素中可以有多个子chapter元素。我尝试使用XmlSerializer反序列化XML。 所有元素都按预期进行了反序列化,但问题是子章节数组没有反序列化,我在这里遗漏了什么吗?请帮忙 <Survey> <SurveyResults> <Subject> <Chapter> <Chapter

我需要反序列化下面的XML。chapter元素中可以有多个子chapter元素。我尝试使用XmlSerializer反序列化XML。 所有元素都按预期进行了反序列化,但问题是子章节数组没有反序列化,我在这里遗漏了什么吗?请帮忙

<Survey>
        <SurveyResults>
            <Subject>
                <Chapter>
                    <ChapterIterationName />
                    <Questions />
                    <Chapter>
                        <ChapterName>CHAPTER 1</ChapterName>
                        <ChapterIterationName />
                        <Questions>
                            <Question>
                                <Text>Question 1</Text>
                            </Question>
                            <Question>
                                <Text>Question 2</Text>
                            </Question>
                        </Questions>
                        <Chapter>
                            <ChapterName>CHAPTER 1.1</ChapterName>
                            <ChapterIterationName />
                            <Questions>
                                <Question>
                                    <Text>Questoin 1</Text>
                                </Question>
                                <Question>
                                    <Text>Questoin 2</Text>
                                </Question>
                            </Questions>
                        </Chapter>
                        <Chapter>
                            <ChapterName>CHAPTER 1.2</ChapterName>
                            <ChapterIterationName />
                            <Questions>
                                <Question>
                                    <Text>Questoin 1</Text>
                                </Question>
                                <Question>
                                    <Text>Questoin 2</Text>
                                </Question>
                            </Questions>
                        </Chapter>
                    </Chapter>
                </Chapter>
            </Subject>
        </SurveyResults>
    </Survey>
这是我尝试过的代码

public class Survey
    { 
        public SurveyResults SurveyResults { get; set; }
    }

    public class SurveyResults
    {
        public Subject Subject { get; set; }
    }

    public class Subject
    { 
        public List<Chapter> Chapter { get; set; }
    }

    public class Chapter
    {
        public string ChapterName { get; set; }
        public string ChapterIterationName { get; set; }

        [XmlArray("Chapter")]
        public List<Chapter> Chapters { get; set; }
        public List<Questions> Questions { get; set; }
    }

    public class Questions
    {
         public List<Question> Question { get; set; }
    }

    public class Question
    {
        public string Text { get; set; } 
    }

    public class Serializer
    { 
        public T Deserialize<T>(string input) where T : class
        {
            System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

            using (StringReader sr = new StringReader(input))
            {
                return (T)ser.Deserialize(sr);
            }
        }
    }

    Serializer ser = new Serializer();
    Survey survey = ser.Deserialize<Survey>(xlString);
结果 [编辑]

经过多次编辑,我找到了解决这个问题的简单方法:

复制XML文件内容。 从VisualStudio菜单中选择编辑->粘贴特殊->将XML粘贴为类。 使用反序列化代码

    string path = @"G:\Projects\StackOverFlow\WpfApp1\Survey.xml";
    FileStream reader = File.OpenRead(path);
    XmlSerializer ser = new XmlSerializer(typeof(Survey));
    Survey survey = (Survey)ser.Deserialize(reader);

不工作,子章节不存在&问题计数=0。已经用输出更新了问题。@KousiK我编辑了我的答案,现在可以了。看一看没有调用任何元素。该元素嵌套到另一个元素。我不是在创建XML,而是从第三方获取XML。我以为是你创造的。我又犯了一个错误:@Bassed Akl,我只需要将xml文件解析为一个C对象。为什么在第章中有列表问题而不是直接列表问题?