Esto se puede lograr, pero deberá sobrescribir el serializador predeterminado aplicando el atributo [XmlSerializerFormat]
al DataContract. Aunque se puede hacer, esto no funciona tan bien como el serializador predeterminado, así que úselo con precaución.
La estructura de clases siguiente le dará el resultado que está buscando:
using ...
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Xml.Serialization;
[DataContract]
[XmlSerializerFormat]
public class root
{
public distance distance=new distance();
}
[DataContract]
public class distance
{
[DataMember, XmlAttribute]
public string units="m";
[DataMember, XmlText]
public int value=1000;
}
Esto se comprueba con el siguiente código:
root mc = new root();
XmlSerializer ser = new XmlSerializer(typeof(root));
StringWriter sw = new StringWriter();
ser.Serialize(sw, mc);
Console.WriteLine(sw.ToString());
Console.ReadKey();
la salida será:
<?xml version="1.0" encoding="utf-16"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<distance units="m">1000</distance>
</root>
Si está buscando el atributo XmlSerializerFormat, puede encontrarlo en el espacio de nombres System.ServiceModel: http://msdn.microsoft.com/en-us/library/system.servicemodel.xmlserializerformatattribute%28v=VS.90 % 29.aspx – jeffreypriebe
Claro, eso funciona para la codificación, me gusta leer la lectura de los documentos :) – jeffreypriebe
@GregSansom, que asume que ya ha agregado la referencia. La resolución no aparece como una opción si no lo ha hecho. –