I'm assuming that the xml is actually something like <UpdatedOn/>
/ <DeletedOn/>
? i.e. empty elements.
When non-standard formats are involved, one trick that works is to introduce your own shim property:
[Serializable]
public class Foo {
[XmlIgnore]
public DateTime Bar { get; set; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
[XmlElement("Bar")]
public string BarTransport {
get {
return Bar == DateTime.MinValue ? "" : XmlConvert.ToString(Bar);
}
set {
Bar = string.IsNullOrEmpty(value) ? DateTime.MinValue
: XmlConvert.ToDateTime(value);
}
}
}
Here, the Foo.Bar
property (the actual DateTime
) isn't used during serialization; instead, the Foo.BarTransport
property is serialized under the Bar
element - but with special rules. You can replace DateTime.MinValue
with any other value that you want to treat as the blank/default.
Note that if you don't want to send the Bar
element at all, you can write a public bool ShouldSerializeBarTransport()
, which XmlSerializer
will check - if you return false
, it won't get written.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…