2009-10-29 19 views
14

Mam prostą klasę, które serializuję.Jak dodać atrybut XML za pomocą DataContract

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

    public Test() {} 
} 

ten rozpoczyna się następujące XML:

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

co chcę:

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

Jak dodać atrybuty elementów XML?

Z góry dziękuję.

Odpowiedz

13

Nie można dodawać atrybutów do DataContract. Musisz użyć klasy, która implementuje ISerializable lub użyć .Net XmlSerializer.

+0

'IXmlSerializable' dla xml. –

+4

W zależności od systemu przeprowadzającego serializację, możliwe jest zrobienie tego, o co prosi OP - patrz: http://stackoverflow.com/questions/4858798/datacontract-xml-serialization-and-xml-attributes/4859084#4859084 – jeffreypriebe

0

Niezupełnie odpowiedź, ale można spróbować zaimplementować IXmlSerializable, aby w pełni kontrolować wyjściowy format XML.

0

Udało mi się to osiągnąć deklarując XElement, który ma zdefiniowane w nim atrybuty. Np

public XElement Text { get; set;} 
+2

Kod '[DataMember (Name =" test ")] publiczny test XElement = nowy XElement (" root ", nowy wykaz () {" 1 "," 2 "," 3 "});" plony ' 123 ' który prawdopodobnie nie jest to, co jest przeznaczone quenstioner – codingdave

-2

dodać atrybut typ z [XMLAttribute] i wartość elementu z [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; } 
    } 
} 
+1

próbowałem tego i nie dostać ani wpisać tekst w odcinkach – codingdave

Powiązane problemy