C# - 使用Linq to XML填充对象列表

时间:2014-01-26 18:45:26

标签: c# xml linq linq-to-xml

我正在尝试使用XML文件的内容作为对象列表的数据源。该对象如下所示:

public class QuestionData
{
public string QuestionName{get;set;}
public List<string> Answers{get;set;}
}

这是我的XML:

<?xml version="1.0" encoding="utf-8" ?>
<QuestionData>
    <Question>
        <QuestionName>Question 1</QuestionName>
        <Answers>
            <string>Answer 1</string>
            <string>Answer 2</string>
            <string>Answer 3</string>
            <string>Answer 4</string>
        </Answers>
    </Question>
    <Question>
        <QuestionName>Question 2</QuestionName>
        <Answers>
            <string>Answer 1</string>
            <string>Answer 2</string>
            <string>Answer 3</string>
        </Answers>
    </Question>
</QuestionData>

我用来尝试执行此操作的代码是:

var xml = XDocument.Load ("C:\temp\xmlfile.xml");

List<QuestionData> questionData = xml.Root.Elements("Question").Select 
(q => new QuestionData {
  QuestionName = q.Element ("QuestionName").Value, 
  Answers = new List<string> { 
    q.Element ("Answers").Value }
}).ToList ();

代码编译,但我没有从XML获取任何数据。我通过questionData循环尝试将信息显示到控制台,但它是空的。

1 个答案:

答案 0 :(得分:4)

List<QuestionData> questionData =
    xml.Root
       .Elements("Question")
       .Select(q => new QuestionData
                     {
                         QuestionName = (string)q.Element("QuestionName"),
                         Answers = q.Element("Answers")
                                    .Elements("string")
                                    .Select(s => (string)s)
                                    .ToList()
                     }).ToList();

我使用了(string)XElement强制转换而不是XElement.Value属性,因为当元素为NullReferenceException时,它不会抛出null