如何使用asp.net序列化使用值和属性反序列化xml节点

San*_*der 27 c# xml xml-serialization c#-4.0

我有4个小类来从xm轮询中反序列化xml,到可用的类来构建轮询.

现在,我知道如何从类中设置属性,以匹配xml中的某个属性或元素,如果该元素只是一个简单的字符串,但如果该元素也具有如下例所示的属性,该怎么办?

<Questions>
 <Question id="a guid">
  <AnswerItems>
   <AnswerItem Id="a guid">3</AnswerItem>
   <AnswerItem Id="a guid">2</AnswerItem>
   <AnswerItem Id="a guid">5</AnswerItem>
  </AnswerItems>
 </Question>
</Questions>
Run Code Online (Sandbox Code Playgroud)

问题类看起来像这样:

[Serializable()]
public class Question
{
    [XmlAttribute("Id")]
    public Guid QuestionId { get; set; }

    [XmlArray("AnswerItems")]
    [XmlArrayItem("AnswerItem", typeof(AnswerItem))]
    public AnswerItem[] AnswerItems { get; set; }
}

[Serializable()]
public class AnswerItem
{
    [XmlAttribute("Id")]
    public Guid QuestionId { get; set; }

    // how do i fetch the value of this node? 
    // its not a XmlElement and it's not an XmlValue
}
Run Code Online (Sandbox Code Playgroud)

好的,所以AnswerItem节点的值,这也是我想要得到的.我可以很容易地不使用AnswerItem类,只使用String类型的XmlArray AnswerItems并将值放在数组中,但之后我将丢失AnswerItem的Id属性.

rsb*_*rro 65

AnswerItem,调用属性Value并使用XmlText属性标记它.此设置将导致将元素中XmlSerializer的文本读AnswerItemValue属性.

[Serializable()]
public class AnswerItem
{
    [XmlAttribute("Id")]
    public Guid QuestionId { get; set; }

    [XmlText]
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 只是想张贴那个,我一直在寻找类似问题的答案,这是第一个在整个堆栈中向我展示这样的东西......如果我能<3,我会给+10 (4认同)