你如何从xml读取嵌套对象?

时间:2011-07-19 13:48:36

标签: windows-phone-7 xml-serialization linq-to-xml

我有一个看起来像这样的

的xml文件
<questions>
  <question>
    <text>What color is an orange?</text>
    <answer>blue</answer>
    <answer>yellow</answer>
    <answer>orange</answer>
  </question>
  <question>
     <text>What color is a banana?</text> ...

我已经设法弄清楚如何使用对象的公共方法将属性和值读入属性,但是如何获得包含“Answer”对象的“Question”对象,是否会更好只是序列化而不是使用linq-to-xml

这是使用linq:

        var data = from query in questionData.Descendants("question")
                   select new Quiz.Question
                   {
                       QuestionTitle = (string)query.Attribute("title"),
                       QuestionText = query.Element("text") != null ? query.Element("text").Value.Trim() : string.Empty,
                       QuestionImage = query.Element("image") != null ? query.Element("image").Attribute("src").Value : string.Empty

...

在linq中如何将另一个节点序列化为另一个对象,比如我在“问题”中有一个“回答”对象列表?

1 个答案:

答案 0 :(得分:1)

你可以使用序列化,但是如果你想要一个完全可以理解的方法,我会推荐这个:

在问题类中:

public static Question FromXmlElement(XElement el)
{
    return new Question
    {
        Text = el.Element("Text").Value,
        Answers = el.Elements("Answer").Select(a=>a.Value);
    };
}

当你想阅读时:

var xdoc = XDocument.Parse(xml);
var questions = xdoc.Element("Questions").Elements("Question")
            .Select(e=> Question.FromXmlElement(e));
如果您的类具有复杂类型的属性,则可以从FromXmlElement内部调用另一个复杂类型的相同方法,等等。