Ceci peut être réalisé, mais vous aurez à remplacer la valeur par défaut sérialiseur par l'application de l' [XmlSerializerFormat]
attribut à la DataContract. Bien qu'il peut être fait, cela ne marche pas aussi bien que le défaut de sérialiseur, afin de l'utiliser avec prudence.
La suite de la structure de la classe vous donnera le résultat que vous recherchez:
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;
}
Vous pouvez tester avec le code suivant:
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 sortie sera:
<?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>