将C#日期时间类型转换为XML日期时间类型

本文关键字:日期 时间 XML 类型 类型转换 | 更新日期: 2023-09-27 18:21:57

这个问题的变体显然已经被问了几十次,但我需要的解决方案似乎非常难以捉摸。我希望这次是魅力所在!

我有一个C#应用程序,它通过SOAP xml与Java web服务通信。应用程序使用WSDL导入了服务,没有出现任何问题。但是,其中一个xml对象的类型是dateTime。

<complexType name="Interaction">
    <sequence>
        <element name="ContactDate" type="dateTime" minOccurs="0" maxOccurs="1"/>
    </sequence>
</complexType>

我从数据库中检索到了一个日期,如下所示:2013-07-10。我需要使用UTC格式将其放入XML dateTime对象中:yyyy-MM-ddTHH:MM:ss.fffzzz

我可以很容易地将其转换为正确解析的字符串。这不是问题所在。当我尝试将数据加载到服务对象中时,就会出现此问题。我无法将数据加载为字符串。它必须是一个DateTime对象,但DateTime拒绝使用UTC格式。

我认为这可能是序列化的问题。我认为在转换为要发送到web服务的xml时,它未能正确序列化。以下是这个特定元素的序列化信息:

[System.Xml.Serialization.XmlElementAttribute(Order=2)]
public System.DateTime ContactDate {
    get {
        return this.contactDateField;
    }
    set {
        this.contactDateField = value;
        this.RaisePropertyChanged("ContactDate");
    }
}

关于我可能遗漏或做错了什么,有什么想法吗?如有任何帮助,我们将不胜感激。谢谢

将C#日期时间类型转换为XML日期时间类型

使用Z表示UTC。这是你的问题吗?

您可以在此处阅读更多信息:http://www.w3.org/TR/xmlschema-2/#dateTime-时区

因此,2002-10-10T07:00:00Z是2002年10月10日协调世界时0700。

最后,这是我们为这个问题得出的非常不幸的答案。无论如何,我们都无法确定是否强制C#正确地序列化为日期时间格式。为了解决这个问题,我们最终更改了Java web服务的WSDL,将类型更改为字符串。一旦它被设置为字符串,其他一切显然都很容易。

complexType name="Interaction">
    <sequence>
        <element name="ContactDate" type="string" minOccurs="0" maxOccurs="1"/>
    </sequence>
</complexType>