当我在其中序列化带有可为空的 DateTime 的 ac# 对象时,有没有办法将空值留在 xml 文件中,而不是让
<EndDate d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />
当我在其中序列化带有可为空的 DateTime 的 ac# 对象时,有没有办法将空值留在 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);
}
对您想要选择性序列化的每个属性执行此操作。