как вы читаете вложенные объекты из XML? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть 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> ...

Мне удалось выяснить, как считывать атрибуты и значения в свойства, используя открытые методы для объекта, но как я могу получить объект «Вопрос», который будет содержать объекты «Ответ», было бы лучше просто сериализовать, чем использовать 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 как мне сериализовать другой узел как другой объект, скажем, у меня есть список объекта «answer» в «question»?

1 Ответ

1 голос
/ 19 июля 2011

Вы можете использовать для этого сериализацию, но если вы хотите иметь полностью оправданный способ сделать это, я бы порекомендовал следующее:

В классе Вопрос:

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 вы можете вызывать тот же метод другого сложного типа, если у вашего класса есть свойство сложного типа и т. д.

...