将 XML 日期时间反序列化为 UTC [英] Deserialize XML dateTime to UTC

查看:44
本文介绍了将 XML 日期时间反序列化为 UTC的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用包含 XSD 元素的 XML 网络服务,例如:

I am consuming an XML webservice with XSD elements such as:

<xs:element nillable="true" type="xs:dateTime" name="ENDDATE"/>

XML 可能如下所示:

XML might look like the following:

<ENDDATE>2016-08-01T18:35:49+04:00</ENDDATE>

我使用 XSD.exe 自动生成 C# 类,当我检查这些类时,DateTime 对象将包含系统本地时间的时间,Kind==Local.

I used XSD.exe to autogenerate C# classes, when I inspect these the DateTime object will contain the time in system-local time, with Kind==Local.

有没有一种方法可以强制 DateTime 实例使用 UTC 时间,而无需为每个此类字段手动破解自动生成的类(有很多)?

Is there a way I can force the DateTime instances to be in UTC time without manually hacking the auto-generated classes for every such field (there are rather a lot)?

推荐答案

我认为您无法使用 XSD 调整此行为(请参阅 此处).因此,您应该更新(hack)自动生成的类并执行类似于 那里:

I think that you can't tune this behavior using XSD (see here). So you should update(hack) auto-generated classes and do something like described there:

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

或者,如果您真的经常自动生成这些类,您可以为它们引入包装器,这将透明地将 DateTime 转换为 UTC.

Or, if you really often auto-generate those classes, you can introduce wrappers for them, which will transparently convert DateTime to UTC.

这篇关于将 XML 日期时间反序列化为 UTC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆