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

本文关键字:属性 节点 xml asp 何使用 net 序列化 反序列化 | 更新日期: 2023-09-27 17:58:07

我有4个小类来将xml从一个单独的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>

问题类看起来是这样的:

[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
}

好的,那么AnswerItem节点的值,这也是我想要得到的。我可以很容易地不使用AnswerItem类,只使用String类型的XmlArray AnswerItems并将值放入数组中,但这样我就会丢失AnswerItemId属性。

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

AnswerItem中,创建一个名为Value的属性,并用XmlText属性标记它。此设置将使XmlSerializerAnswerItem元素中的文本读取到Value属性中。

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