是否可以将此XML反序列化为带有DataContract属性标记的对象?
<root> <distance units="m">1000</distance> </root>
您可能会看到有“单位”属性。我不认为这是受支持的。还是我错了?
这可以实现,但是您必须通过将[XmlSerializerFormat]属性应用于DataContract 来覆盖默认的序列化程序。尽管可以做到,但它的性能不如默认的序列化程序,因此请谨慎使用。
[XmlSerializerFormat]
以下类结构将为您提供您所追求的结果:
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; }
您可以使用以下代码对此进行测试:
root mc = new root(); XmlSerializer ser = new XmlSerializer(typeof(root)); StringWriter sw = new StringWriter(); ser.Serialize(sw, mc); Console.WriteLine(sw.ToString()); Console.ReadKey();
输出将是:
<?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>