我有一系列类,我在 .NET 4.0 中使用 .NET 的 DataContractSerializer 将它们转换为 XML。序列化工作正常,我可以解析 XML 并稍后重新创建 .NET 对象,没有任何困难。
但是,大多数 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 具有空值时,有没有办法让 DataContractSerializer 不写入节点?