将XML dateTime反序列化为UTC

本文关键字:UTC 反序列化 dateTime XML | 更新日期: 2023-09-27 18:13:22

我正在使用一个带有XSD元素的XML web服务,如:

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

XML可能如下所示:

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

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

是否有一种方法可以强制DateTime实例在UTC时间,而无需手动破解每个此类字段的自动生成类(有相当多)?

将XML dateTime反序列化为UTC

我认为您无法使用XSD调优此行为(请参阅此处)。因此,您应该更新(修改)自动生成的类,并执行如下所述的操作:

[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。