我有一系列的类,我使用.NET 4.0中的.NET DataContractSerializer转换为XML。序列化工作正常,我可以解析XML并稍后重新创建.NET对象。避免在.Net DataContractSerializer中使用“http://www.w3.org/2001/XMLSchema-instance”命名空间
但是,大多数DataMember不是必需的。 [DataMember(IsRequired = false)]。这对于反序列化XML非常有用,在这种情况下,您可以错过文档中的XML节点,但是当将现有对象序列化为XML时,DataContractSerializer坚持要将具有空值的属性写为具有属性的节点。
[DataContract(Name = "response", Namespace = "http://domain.com/name")]
public class MyResponseClass
{
[DataMember(Name = "count", IsRequired = true, Order = 0)]
public int Count { get; set; }
[DataMember(Name = "info", IsRequired = false, Order = 1)]
public InfoClass Info { get; set; }
[DataMember(Name = "metadata", IsRequired = false, Order = 2)]
public MetadataList Metadatas { get; set; }
}
可以从
<response xmlns="http://domain.com/name">
<count>4</count>
</response>
被序列但是,如果我连载的对象,而是创建:
<response xmlns="http://domain.com/name" xmlns:i="http://www.w3.org/2001/XmlSchema-instance">
<count>4</count>
<info i:nil="true" />
<metadata i:nil="true" />
</response>
有没有什么办法让DataContractSerializer的不写节点,而不是,当它有一个空值?
你忽略了你的榜样。 –
斑点...切割和粘贴出错了... –