如何在没有值的情况下使用DataContractSerializer隐藏/排除列表节点?

时间:2013-08-21 09:28:59

标签: xml serialization datacontractserializer datacontract datamember

如果列表节点没有值,如何用DataContractSerializer隐藏它?

[DataContract(Namespace = "")]
    public class Order
    {
        [DataMember(EmitDefaultValue = false)]
        public string Name { get; set; }

        [DataMember(EmitDefaultValue = false)]
        public List<OrderItem> OrderItems { get; set; }
}

如果Name没有值,它将被隐藏,但如果OrderItems没有值,它将显示为<OrderItems />.

我正在使用DataContractSerlializer。

1 个答案:

答案 0 :(得分:1)

它应该工作。除非你在做 -

yourObject.OrderItems = new List<OrderItem>();
在你的代码中的

。 为此,内存分配给列表,它不再是默认值null! 相反,它是OrderItem

的空列表

因此,如果您在序列化之前在代码中的某个位置初始化列表,EmitDefaultValue将无效,并且会将<OrderItems />添加到您的XML中。