gpt4 book ai didi

.net - 具有空值的日期的 XML 反序列化

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:34 24 4
gpt4 key购买 nike

我从一家供应商那里得到一个 xml 文件,其中有一些像这样的“空”日期:

<UpdatedOn/>
<DeletedOn/>

通过常规反序列化,它失败了:

Inner Exception: System.FormatException: String was not recognized as a valid DateTime.

有什么想法可以解决这个问题吗?

我的字段已经标记为默认的 DateTime:

[System.Xml.Serialization.XmlElementAttribute(DataType="date")]
[System.ComponentModel.DefaultValueAttribute(typeof(System.DateTime), "1901-01-01")]
public System.DateTime UpdateOn{...}

最佳答案

我假设 xml 实际上类似于 <UpdatedOn/>/<DeletedOn/> ?即空元素。

当涉及非标准格式时,一个有效的技巧是引入您自己的 shim 属性:

[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);
}
}
}

在这里,Foo.Bar序列化期间不使用属性(实际的 DateTime );相反,Foo.BarTransport属性在 Bar 下序列化元素 - 但有特殊规则。您可以替换 DateTime.MinValue使用您想要视为空白/默认值的任何其他值。

请注意,如果您不想发送 Bar元素,你可以写一个 public bool ShouldSerializeBarTransport() ,这XmlSerializer将检查 - 如果您返回 false , 它不会被写入。

关于.net - 具有空值的日期的 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/838246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com