C#XML序列化不写空

问题描述:

当我序列C#对象在它可空的日期时间,有没有办法离开空值列的XML文件,而不必C#XML序列化不写空

<EndDate d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" /> 

可以使用Specified扩展属性留出空值(或任何其他值,对于这个问题)。基本上,创建与序列化属性同名的另一个属性,字Specified作为布尔值添加到结尾。如果Specified属性是true,那么它正在控制的属性将被序列化。否则,如果它是false,其他属性保留了完全的XML文件:

[XmlElement("EndDate")] 
public DateTime? EndDate { get; set; } 
[XmlIgnore] 
public bool EndDateSpecified { get { 
    return (EndDate != null && EndDate.HasValue); } } 
+0

谢谢,这是有效的。 – Patrick

+0

借调,它的工作原理。 – MvcCmsJon

+0

非常聪明。谢谢! 是否需要'[XmlElement(“EndDate”)]? – Deadlykipper

MSDN link

这可以让你说你是否想为空的空元素对象

+0

实际上这不会工作,因为DateTime是一个值类型。从你链接的文档中可以看出:“**此外,对于可为null的值类型,不能将此属性设置为false。当这些类型为空引用(在Visual Basic中为Nothing)时,它们将通过将xsi:nil设置为true来序列化。 *“ – mellamokb

+0

好点,我确实想念他处理DateTime的事实,thansk指出这一点 – Pharabus

我知道这是一个古老的线程,但万一别人发现这个:

您还可以实现每个属性检查是否应该序列化的公共方法。该公约是:

bool ShouldSerialize[YourPropertyName](); 

例如,你的情况

public bool ShouldSerializeEndDate(){ 
    return (EndDate != null && EndDate.HasValue); 
} 

为你做这个要有选择性连载每个属性。