【问题标题】:Convert a C# DateTime to XML dateTime type将 C# DateTime 转换为 XML dateTime 类型
【发布时间】:2013-07-10 22:02:42
【问题描述】:

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

我有一个 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");
    }
}

关于我可能遗漏或做错了什么的任何想法?任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 这是序列化问题,还是解析问题?这个答案有帮助吗? stackoverflow.com/a/1756681/116895
  • 另一个潜在的帮助? stackoverflow.com/q/6314154/116895
  • 仍在研究这个,但提供的这两个提示似乎都是针对采用 xml 或 DateTime 并将其转换为字符串的常见场景。转换为字符串似乎不是问题。更多的是强制 DateTime 序列化为正确的格式。如果我能捕获序列化的输出来验证它放在那里的东西,那就太好了。
  • 我想我明白为什么我的答案不是您想要的,但我很难理解这在哪里发生了故障。你从数据库中得到一个System.DateTime,然后把它放到ContactDate 属性中,然后序列化所有东西,你得到了什么?你得到你当地的时区偏移量还是别的什么?
  • 我现在几乎可以完全确定这是一个序列化问题。我试图将 ContactDate 设置为 DateTime 对象和字符串(在将参考内容更改为字符串而不是 System.DateTime 之后)。在另一端管理 Web 服务的人报告,在这两种情况下,接收到的值都是空的。所以我设置了一个值,但它没有到达目的地。

标签: c# .net xml serialization wsdl


【解决方案1】:

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

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

所以,2002-10-10T07:00:00Z 是 2002 年 10 月 10 日 0700 UTC。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2012-06-03
      相关资源
      最近更新 更多