Как добавить атрибут 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-элементов?

Спасибо заранее.

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

public XElement Text { get; set;}

Ответ 4

Добавьте атрибут type с [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; }
    }
}