我有一个看起来像这样的
的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中如何将另一个节点序列化为另一个对象,比如我在“问题”中有一个“回答”对象列表?
答案 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内部调用另一个复杂类型的相同方法,等等。