如何使用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属性。
在AnswerItem
中,创建一个名为Value
的属性,并用XmlText
属性标记它。此设置将使XmlSerializer
将AnswerItem
元素中的文本读取到Value
属性中。
[Serializable()]
public class AnswerItem
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
[XmlText]
public string Value { get; set; }
}