【问题标题】:How would I serialize XML with nested Elements into an object我如何将带有嵌套元素的 XML 序列化为对象
【发布时间】:2011-07-21 20:19:06
【问题描述】:

我有一个包含如下嵌套标签的 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的教程

【问题讨论】:

    标签: c# serialization windows-phone-7 xml-serialization


    【解决方案1】:
        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 的反序列化方法可以做到这一点。

    【讨论】:

    • 谢谢,我会试一试。我认为这只是嵌套类可能会让它绊倒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多