Web服务在整数字段中发送null

时间:2011-05-31 20:57:37

标签: .net soap soap-client

我正在尝试使用第三方网络服务。返回的其中一个字段定义为

<s:element name="SomeField" minOccurs="0" maxOccurs="1" type="s:int"/> 

在SOAP响应中,他们将字段发送为

<SomeField/>

这会导致.Net反序列化器抛出异常,因为空的xml元素不是有效的整数。

处理此问题的最佳方法是什么?

我试过调整wsdl来将字段标记为可为空,这会将生成的字段标记为int?但解串器仍然失败。

我可以将端点实现为服务引用或Web服务引用。

3 个答案:

答案 0 :(得分:4)

我不认为.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);
 }

答案 1 :(得分:3)

您可以将默认值设置为0.这样,如果未设置该值,则会发送0。

<s:element name="SomeField" minOccurs="0" maxOccurs="1" default="0" type="s:int"/> 

答案 2 :(得分:1)

这是他们代码中的错误。这与架构不匹配。 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>