Visual Studio 忽略 WSDL 时间格式
WSDL time format is ignored from Visual Studio
来自客户的 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 文件作为 "Web Reference"(不是服务参考)包含在 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}) 的模式是完全无视。
IE。负载看起来像:
<I_TIMETO xmlns="">17:11:00.0000000+01:00</I_TIMETO>
而不是:
<I_TIMETO xmlns="">17:11:00</I_TIMETO>
无法更改 Web 服务,我不想更改自动生成的代码。
我认为没有好的解决方案,所以你必须编辑自动生成的代码。
创建自动生成代码的部分 class 并添加一个字符串 属性,其中包含正确的格式:
[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{...
来自客户的 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 文件作为 "Web Reference"(不是服务参考)包含在 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}) 的模式是完全无视。 IE。负载看起来像:
<I_TIMETO xmlns="">17:11:00.0000000+01:00</I_TIMETO>
而不是:
<I_TIMETO xmlns="">17:11:00</I_TIMETO>
无法更改 Web 服务,我不想更改自动生成的代码。
我认为没有好的解决方案,所以你必须编辑自动生成的代码。
创建自动生成代码的部分 class 并添加一个字符串 属性,其中包含正确的格式:
[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{...