Как добавить атрибут XML с помощью DataContract - PullRequest
15 голосов
/ 29 октября 2009

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

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

13 голосов
/ 29 октября 2009

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

1 голос
/ 29 октября 2009

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

0 голосов
/ 17 марта 2014

Добавьте атрибут типа с помощью [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; }
    }
}
0 голосов
/ 16 июня 2013

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

public XElement Text { get; set;}
...