我有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并将值放在数组中,但是我会失去AnswerItem的Id属性。
答案 0 :(得分:62)
在AnswerItem
中,创建一个名为Value
的属性,并使用XmlText
属性对其进行标记。此设置会导致XmlSerializer
将AnswerItem
元素中的文字读入Value
属性。
[Serializable()]
public class AnswerItem
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
[XmlText]
public string Value { get; set; }
}