2009-10-29 25 views
14

Tengo una clase simple que estoy serializando.Cómo agrego un atributo XML usando DataContract

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

    public Test() {} 
} 

Esto inicia el siguiente XML:

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

Lo que quiero es:

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

¿Cómo puedo añadir los atributos de los elementos XML?

Gracias de antemano.

Respuesta

13

No puede agregar atributos a un DataContract. Debe utilizar una clase que implemente ISerializable o use .Net XmlSerializer.

+0

'IXmlSerializable' for xml. –

+4

Dependiendo del sistema que realiza la serialización, es posible hacer lo que el OP está pidiendo - ver: http://stackoverflow.com/questions/4858798/datacontract-xml-serialization-and-xml-attributes/4859084#4859084 – jeffreypriebe

0

No es exactamente una respuesta, pero puede intentar implementar IXmlSerializable para controlar completamente el formato de salida XML.

0

Pude lograr esto al declarar un XElement que tiene atributos definidos en él. Ej .:

public XElement Text { get; set;} 
+2

El código '[DataMember (Name =" test ")] public XElement test = new XElement (" Root ", new List () {" 1 "," 2 "," 3 "});' yields ' 123 ' que probablemente no es lo que el quenstioner ha previsto – codingdave

-2

Agregue el atributo de tipo con [XMLAttribute] y el valor del elemento con [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

lo he intentado y no conseguir ni escribo texto serializado – codingdave

Cuestiones relacionadas