我正在尝试使用第三方Web服务。返回的字段之一被定义为
<s:element name="SomeField" minOccurs="0" maxOccurs="1" type="s:int"/>
在SOAP响应中,他们将字段作为发送
<SomeField/>
这会导致.Net反序列化程序引发异常,因为空的xml元素不是有效的整数。
处理这个问题的最佳方法是什么?
我尝试过调整wsdl以将字段标记为null,这确实将生成的字段标记为int?但是解串器仍然失败。
我可以将端点实现为服务引用或web服务引用。
我认为.Net取消序列化程序无法处理此问题。
将SomeField
的定义调整为字符串如何。这种方法可以检查null,但您必须执行Int32.Parse以获取实际值。
<s:element name="SomeField" minOccurs="0" maxOccurs="1" type="s:string"/>
访问者可以是:
void int? GetSomeField()
{
if (someField == null) return null;
return In32.Parse(someField);
}
您可以将默认值设置为0。这样,如果未设置该值,它将发送0。
<s:element name="SomeField" minOccurs="0" maxOccurs="1" default="0" type="s:int"/>
这是他们代码中的一个错误。与架构不匹配。XMLSpy表示:
File Untitled6.xml is not valid.
Value '' is not allowed for element <SomeField>.
Hint: A valid value would be '0'.
Error location: root / SomeField
Details
cvc-datatype-valid.1.2.1: For type definition 'xs:int' the string '' does not match a literal in the lexical space of built-in type definition 'xs:int'.
cvc-simple-type.1: For type definition 'xs:int' the string '' is not valid.
cvc-type.3.1.3: The normalized value '' is not valid with respect to the type definition 'xs:int'.
cvc-elt.5.2.1: The element <SomeField> is not valid with respect to the actual type definition 'xs:int'.
我通过以下模式得到了它:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="root">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SomeField" minOccurs="0" maxOccurs="1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
以及以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<root xsi:noNamespaceSchemaLocation="Untitled5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SomeField/>
</root>