防止对DateTime值进行反序列化时的时区转换

Odr*_*ade 28 c# timezone datetime xml-serialization

我有一个我使用序列化/反序列化的类XmlSerializer.该类包含一个DateTime字段.

序列化时,该DateTime字段由包含GMT偏移的字符串表示,例如2010-05-05T09:13:45-05:00.反序列化时,这些时间将转换为执行反序列化的机器的本地时间.

由于不值得解释的原因,我想阻止这种时区转换的发生.序列化发生在野外,其中存在此​​类的多个版本.反序列化发生在我控制的服务器上.因此,似乎在反序列化期间最好处理这个问题.

除了IXmlSerializable"手动" 执行和执行所有反序列化之外,我怎样才能实现这一点?

小智 30

我做了什么,是使用DateTime.SpecifyKind方法,如下所示:

DateTime dateTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,希望这对你有所帮助.


Ada*_*hes 24

DateTime您可以将其解析为a而不是解析,DateTimeOffset并使用该DateTimeOffset.DateTime属性忽略时区.像这样:

[XmlIgnore()]
public DateTime Time { get; set; }

[XmlElement(ElementName = "Time")]
public string XmlTime
{
    get { return XmlConvert.ToString(Time, XmlDateTimeSerializationMode.RoundtripKind); }
    set { Time = DateTimeOffset.Parse(value).DateTime; }
}
Run Code Online (Sandbox Code Playgroud)