Подтвердить что ты не робот

Как десериализовать xml node со значением и атрибутом, используя сериализацию asp.net

У меня есть 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 not an XmlValue
}

Хорошо, поэтому значение AnswerItem node, это то, что я хочу получить. я мог бы легко не использовать класс AnswerItem и просто использовать XmlArray AnswerItems типа String и поместить значения в массив, но тогда я потеряю атрибут IdI идентификатора.

4b9b3361

Ответ 1

В AnswerItem создайте свойство Value и пометьте его атрибутом XmlText. Этот параметр заставит XmlSerializer прочитать текст в элементе AnswerItem в свойстве Value.

[Serializable()]
public class AnswerItem
{
    [XmlAttribute("Id")]
    public Guid QuestionId { get; set; }

    [XmlText]
    public string Value { get; set; }
}