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); } }
答
我知道这是一个古老的线程,但万一别人发现这个:
您还可以实现每个属性检查是否应该序列化的公共方法。该公约是:
bool ShouldSerialize[YourPropertyName]();
例如,你的情况
public bool ShouldSerializeEndDate(){
return (EndDate != null && EndDate.HasValue);
}
为你做这个要有选择性连载每个属性。
谢谢,这是有效的。 – Patrick
借调,它的工作原理。 – MvcCmsJon
非常聪明。谢谢! 是否需要'[XmlElement(“EndDate”)]? – Deadlykipper