C# 如何在具有相同类型子节点的c中反序列化XML
我需要反序列化下面的XML。chapter元素中可以有多个子chapter元素。我尝试使用XmlSerializer反序列化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
<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对象。为什么在第章中有列表问题而不是直接列表问题?