从Visual Studio中忽略WSDL时间格式

时间:2015-02-02 15:55:36

标签: c# visual-studio-2013 wsdl time-format

来自客户的WSDL文件使用以下语法指定时间数据类型:<xsd:simpleType name="time"><xsd:restriction base="xsd:time"><xsd:pattern value="[0-9]{2}:[0-9]{2}:[0-9]{2}"/></xsd:restriction></xsd:simpleType>

我将WSDL文件包含为&#34; Web Reference&#34; Visual Studio C#项目中的(不是服务引用)。这会生成此代码:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="time")]
public System.DateTime I_TIMETO {
get {
     return this.i_TIMETOField;
}
set {
     this.i_TIMETOField = value;
}

}

问题在于,在生成的有效负载中,WSDL文件([0-9] {2}:[0-9] {2}:[0-9] {2})中的模式被完全忽略。 即有效载荷如下:

<I_TIMETO xmlns="">17:11:00.0000000+01:00</I_TIMETO> 

而不是:

<I_TIMETO xmlns="">17:11:00</I_TIMETO> 

无法更改网络服务,我也不想更改自动生成的代码。

2 个答案:

答案 0 :(得分:0)

我认为没有好的解决方案,所以你必须编辑自动生成的代码。

创建自动生成代码的部分类,并添加一个字符串属性,其中包含正确的格式:

[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, 
 DataType = "string", ElementName = "I_TIMETO")]
public string I_TIMETO_STR
{
    get
    {
        return this.i_TIMETOField.ToString("HH:mm:ss");
    }
    set
    {
        this.i_TIMETOField = DateTime.ParseExact(value, "HH:mm:ss", CultureInfo.InvariantCulture);
    }
}

现在转到auto generated属性并添加一个XmlIgnore:

[System.Xml.Serialization.XmlIgnore] 
public System.DateTime I_TIMETO{...

答案 1 :(得分:0)

在这里,您可以找到不涉及编辑自动生成代码的解决方案:https://stackoverflow.com/a/43265625/1104587