我必须用日期反序列化 xml,如下所示:
<date>2015/10/16 00:00:00.000000000</date>
Run Code Online (Sandbox Code Playgroud)
我的课程包含这个字段:
[XmlAttribute("date")]
public DateTime StartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我总是收到默认日期。是否可以解析这种格式的日期时间?
编辑:当我将 XmlAttribute 更改为 XmlElement 时,出现异常:
There is an error in XML document
Run Code Online (Sandbox Code Playgroud)
所以我认为 DateTime 可以解析这种格式。
处理此问题的一种方法是使用 [System.Xml.Serialization.XmlIgnore]修饰 DateTime 成员
这告诉序列化器根本不要序列化或反序列化它。
然后,向该类添加一个附加属性,例如 DateString。它可能被定义为
public string DateString {
set { ... }
get { ... }
}
Run Code Online (Sandbox Code Playgroud)
然后您可以在获取/设置逻辑中序列化和反序列化 DateString:
public string DateString {
set {
// parse value here - de-ser from your chosen format
// use constructor, eg, Timestamp= new System.DateTime(....);
// or use one of the static Parse() overloads of System.DateTime()
}
get {
return Timestamp.ToString("yyyy.MM.dd"); // serialize to whatever format you want.
}
}
Run Code Online (Sandbox Code Playgroud)
在 get 和 set 中,您正在操纵 Date 成员的值,但您是使用自定义逻辑来完成的。当然,序列化属性不必是字符串,但这是一种简单的方法。您还可以使用 int 进行序列化/反序列化,例如使用 unix 纪元
通过迪诺·基耶萨