将XML dateTime反序列化为UTC

时间:2016-10-17 16:53:28

标签: c# .net xsd xsd.exe

我正在使用带有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时间而无需手动攻击每个这样的字段的自动生成的类(相当多)?

1 个答案:

答案 0 :(得分:1)

我认为您无法使用XSD调整此行为(请参阅here)。 因此,您应该更新(破解)自动生成的类,并执行类似描述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。