Как добавить атрибут XML с помощью DataContract

У меня есть простой класс, который я сериализую.

 [DataContract(Name = "Test", Namespace = "")]
 public class Test
 {
    [DataMember(Order = 0, Name = "Text")]
    public string Text { get; set; }

    public Test() {}
 }

Это выбивает следующий XML:

<Test>
   <Text>Text here</Text>
</Test>

Что я хочу это:

<Test>
   <Text type="MyType">Text here</Text>
</Test>

Как добавить атрибуты к элементам XML?

Заранее спасибо.

4 ответа

Решение

Вы не можете добавить атрибуты в DataContract. Вы должны либо использовать класс, который реализует ISerializable, либо использовать.Net XmlSerializer.

Не совсем ответ, но вы можете попытаться реализовать IXmlSerializable для полного контроля выходного формата XML.

Я смог добиться этого, объявив XElement, в котором определены атрибуты. Пример:

public XElement Text { get; set;}

Добавьте атрибут типа с помощью [XMLAttribute] и значение элемента с помощью [XmlText].

public class Test
{
    public text Text;

    public Test()
    {
        Text = new text();
    }

    [DataContract(Name = "Test", Namespace = "")]
    public class text
    {
        [XmlText]
        public string Text { get; set; }
        [XmlAttribute]
        public string type { get; set; }
    }
}
Другие вопросы по тегам