如何使用asp.net序列化来反序列化一个具有值和属性的xml节点
问题描述:
我有4个小类将反编译xml轮询的xml反序列化为可用的类来构建轮询。如何使用asp.net序列化来反序列化一个具有值和属性的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并将值放入数组中,但然后我会丢失AnswerItem的Id属性。
答
在AnswerItem
中,创建一个名为Value
的属性并将其标记为XmlText
属性。此设置将导致XmlSerializer
将AnswerItem
元素中的文本读取到Value
属性中。
[Serializable()]
public class AnswerItem
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
[XmlText]
public string Value { get; set; }
}
只是想发布,我一直在寻找类似问题的答案,这是第一个在所有堆栈中向我展示了这样的东西...我会给+10 if我可以 2017-05-02 05:49:47