首页 > 解决方案 > 从 C# 中的 WSDL 生成的代码无法解析具有时区的日期

问题描述

我的 C# 客户端基于 WSDL 文件生成了具有以下字段的服务:

    [System.Xml.Serialization.XmlElementAttribute(DataType="date", Order=6)]
    public System.DateTime SomeDate{
        get {
            return this.SomeDateField;
        }
        set {
            this.SomeDateField = value;
            this.RaisePropertyChanged("SomeDate");
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool SomeDateSpecified {
        ...
    }

服务正在发送价值

<v12:SomeDate>1972-07-05+01:00</v12:SomeDate>

根据文档https://www.w3schools.com/xml/schema_dtypes_date.asp Xml DataType“日期”格式应该接受时区,但是我收到错误:

反序列化操作“...”的回复消息正文时出错。---> System.InvalidOperationException: XML 文档中存在错误 (2, 2047)。---> System.FormatException:字符串未被识别为有效的日期时间。在 System.DateTimeParse.ParseExactMultiple(String s, String[] 格式, DateTimeFormatInfo dtfi, DateTimeStyles 风格)

我知道我可以实现 IClientMessageInspector 并删除时区以便对其进行解析,但我想避免这种情况。WSDL 是由客户提供给我的

<xs:element name="SomeDate" type="xs:date" minOccurs="0">
      <xs:annotation>
          <xs:documentation>
              ...
          </xs:documentation>
      </xs:annotation>
  </xs:element>

标签: c#datetimewsdl

解决方案


推荐阅读