Вопрос

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

 [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?

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

Это было полезно?

Решение

Вы не можете добавлять атрибуты в 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; }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top