c# - objeto - cómo deserializar un nodo xml con un valor y un atributo utilizando la serialización de asp.net
xml document serialize c# (1)
En AnswerItem
, AnswerItem
una propiedad llamada Value
y márquela con el atributo XmlText
. Esta configuración hará que XmlSerializer
lea el texto en el elemento AnswerItem
en la propiedad Value
.
[Serializable()]
public class AnswerItem
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
[XmlText]
public string Value { get; set; }
}
Tengo 4 clases pequeñas para deserializar xml de una encuesta xml incomming, a clases utilizables para construir la encuesta.
ahora, sé cómo configurar una propiedad de una clase, para que coincida con un determinado atributo o elemento en el xml, y si ese elemento es solo una cadena que es fácil, pero ¿qué sucede si el elemento también tiene un atributo como en el siguiente ejemplo?
<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>
La clase de pregunta se vería así:
[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
}
Ok, entonces el valor de un nodo AnswerItem, eso es lo que quiero obtener también. podría fácilmente no usar la clase AnswerItem, y simplemente usar un AnswerLtems XmlArray de tipo String y poner los valores en la matriz, pero luego perdería el atributo de Id del AnswerItem.