6

当我在其中序列化带有可为空的 DateTime 的 ac# 对象时,有没有办法将空值留在 xml 文件中,而不是让

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

3 回答 3

11

您可以使用Specified扩展属性省略空值(或任何其他值)。基本上,创建另一个与序列化属性同名的属性,并将单词Specified添加到末尾作为布尔值。如果Specified属性是true,那么它所控制的属性是序列化的。否则,如果是false,则将其他属性完全排除在 xml 文件之外:

[XmlElement("EndDate")]
public DateTime? EndDate { get; set; }
[XmlIgnore]
public bool EndDateSpecified { get {
    return (EndDate != null && EndDate.HasValue); } }
于 2011-10-03T15:11:39.527 回答
0

MSDN 链接

这使您可以说出是否要为空对象使用空元素

于 2011-10-03T15:11:36.150 回答
0

我知道这是一个旧线程,但如果其他人发现这个:

您还可以为每个属性实现一个公共方法来检查它是否应该被序列化。约定是:

bool ShouldSerialize[YourPropertyName]();

例如,在您的情况下

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

对您想要选择性序列化的每个属性执行此操作。

于 2014-09-27T09:52:19.233 回答