Вопрос по c# – Как добавить атрибуты для C # XML-сериализации

37

У меня проблема с сериализацией и объектом, я могу заставить его создать все правильные выходные данные, за исключением тех случаев, когда у меня есть элемент, который нуждается в значении и атрибуте. Вот требуемый вывод:

<Root>
  <Method>Retrieve</Method>
  <Options>
    <Filter>
      <Times>
        <TimeFrom>2009-06-17</TimeFrom>
      </Times>
      <Document type="word">document name</Document>
    </Filter>
  </Options>
</AdCourierAPI>

Я могу построить все это, но не могу найти способ установить атрибут типа документа, вот сегмент класса объекта

[XmlRoot("Root"), Serializable]    
public class Root    
{    
    [XmlElement("Method")]    
    public string method="RetrieveApplications";    
    [XmlElement("Options")]    
    public _Options Options;    
}    
public class _Options    
{
    [XmlElement("Filter")]    
    public _Filter Filter;    
}
public class _Filter    
{
    [XmlElement("Times")]    
    public _Times Times;    
    [XmlElement("Documents")]    
    public string Documents;    
}

что дает мне:

<Document>document name</Document>

скорее, чем:

<Document type="word">document name</Document>

но я не могу найти способ исправить это, пожалуйста, сообщите.

Спасибо

Марк Гравелл спас мой день! :-) Спасибо! user1488372
Извините, Марк ... вы, должно быть, только что получили это редактирование до меня. Kev

Ваш Ответ

3   ответа
56

type хранится?

Обычно вы можете получить что-то вроде:

class Document {
    [XmlAttribute("type")]
    public string Type { get; set; }
    [XmlText]
    public string Name { get; set; }
}


public class _Filter    
{
    [XmlElement("Times")]    
    public _Times Times;    
    [XmlElement("Document")]    
    public Document Document;    
}
Спасибо, ребята, отсортировано, высоко ценится user107779
не работает для меня
Вау, это удивительно, ожидал, что это будет намного сложнее.
11

string класс не имеетtype свойство, так что вы не можете использовать его для создания желаемого результата. Вы должны создатьDocument класс вместо:

{
    [XmlText]
    public string Name;

    [XmlAttribute("type")]
    public string Type;
}

И вы должны изменитьDocument свойство типаDocument

Я согласен (собирался представить то же самое!)
8

public class Document
{
    [XmlAttribute("type")]
    public string Type { get; set; }
    [XmlText]
    public string Name { get; set; }
}

Где экземпляр (в примере) будет иметьType = "word" а такжеName = "document name"; documents будетList<Document>.

Кстати - публичные поля редко бывают хорошей идеей ...

Вы гений, спасибо!

Похожие вопросы