私は、着信xmlポーリングからxmlをデシリアライズし、使用可能なクラスにポーリングを構築するために4つの小さなクラスを持っています。
これで、クラスからプロパティを設定し、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; }
}