【问题标题】:Deserialize XML dateTime to UTC将 XML 日期时间反序列化为 UTC
【发布时间】:2016-10-17 16:53:28
【问题描述】:

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

<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 时间,而无需手动破解每个此类字段的自动生成的类(有很多)?

【问题讨论】:

    标签: c# .net xsd xsd.exe


    【解决方案1】:

    我认为您无法使用 XSD 调整此行为(请参阅 here)。 所以你应该更新(hack)自动生成的类并做类似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。

    【讨论】:

    • 这可行,但在几个班级中可能有 20 个这样的案例。一种自动化的方法会很棒!
    • 恐怕没有办法使用代码生成器如此深入地自定义代码生成,甚至是 3d 派对工具。只是认为为了方便使用,您可以使用扩展方法编写转换,尽管这仍然会强制您在使用 DateTime 属性时明确地执行此操作。
    猜你喜欢
    • 2013-09-22
    • 2016-04-16
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多