Как бы я сериализовал XML с вложенными элементами в объект - PullRequest
0 голосов
/ 21 июля 2011

У меня есть xml с вложенными тегами, такими как:

<?xml version="1.0" encoding="utf-8" ?>
<questions>
  <question title="Which of these is a circle?" type="graphics">
    <text>Which of these is a circle?</text>
    <image src="shapes.png" />
    <Answer correct="true">
      <image src="circle.png"/> 
    </Answer>
    <Answer>
      <image src="square.png"/>
    </Answer>
  </question>
  <question title="Click on the circle" type="point">
    <image src="imageOfShapesWithTheAnswerAt200x150withASizeOf20x20.png"/>
    <Answer x="200" y="150" width="20" height="20" correct="true">Circle</Answer>
    <Answer x="100" y="150" width="20" height="20">NotCircle</Answer>
  </question>
  <question title="Trick question" type="text">
    <text>What was the colour of Duke Wellingtons white horse?</text>
    <image src="images.png" />
    <Answer correct="true">White</Answer>
    <Answer>Blue</Answer>
    <Answer>Black</Answer>
    <Answer>Red</Answer>
    <Answer>Green</Answer>
  </question>
</questions>

Как бы я затем сериализовал его в этот класс?

    [XmlRoot("quiz")]
    public class Quiz
    {
        public class Question
        {
            public String QuestionText { get; set; }
            public String QuestionTitle { get; set; } // automatic getters and setters (nicer)
            public String QuestionImage { get; set; }

            [XmlArray]
            public List<Answer> Answers { get; set; }
        }

        public class Answer
        {
            public Boolean selected { get; set; }
            public Boolean correct { get; set; }

            [XmlElement("text")]
            public String text { get; set; }
            [XmlElement("image")]
            public String image { get; set; }
        }
    }

Я пытался использовать сериализатор, поэтому [XmlElement] и [XmlRoot] в объекте, но я немного борюсь с ним.

Я видел много примеров сериализации в xml, но не так много от xml до объекта.

редактировать

Я нашел учебник для этого http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

1 Ответ

1 голос
/ 21 июля 2011
    XDocument dok = XDocument.Load(Server.MapPath("XMLFile.xml"));
    XmlSerializer mySerializer = new XmlSerializer(typeof(Quiz));
    TextReader TW = new StringReader(dok.ToString());
    Quiz quizData= mySerializer.Deserialize(TW) as Quiz;

Метод десериализации XmlSerializer может сделать это.

...