WSDL时间格式从Visual Studio忽略(WSDL time format is ignor

2019-10-21 18:16发布

从客户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文件作为一个Visual Studio C#项目“Web引用”(没有服务参考)。 产生这样的代码:

[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> 

这是不可能改变的Webservice,我不想改变自动生成的代码。

Answer 1:

我觉得没有很好的解决办法,所以你必须编辑自动生成的代码。

创建一个局部类自动生成的代码,并在它的正确的格式添加一个字符串属性:

[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);
    }
}

现在去自动生成的属性,并添加XmlIgnore:

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


Answer 2:

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



文章来源: WSDL time format is ignored from Visual Studio