我最近遇到了一个 SOAP Web 服务的问题,其中 WSDL 为特定字段指定一个整数,但是 XML 带有一个空元素,这会导致 .NET 反序列化逻辑抛出 FormatException。
WSDL 如下所示:
<xsd:element minOccurs="0" maxOccurs="1" name="TransID" type="xsd:int" />
SOAP 看起来像这样:
<TransID></TransID>
这会在解析响应时导致异常。我正在与之交谈的服务器属于供应商,因此我无法更改它。我在短期内通过将字段重新定义为字符串来解决这个问题。
我的问题是:在尝试诊断此问题时,我将 XML 提取到一个文件中并创建了自己的 XmlSerializer 来测试使用 WSDL 导入生成的 POCO 进行反序列化。我创建的 XmlSerializer 可以很好地解析这个 XML 并按预期生成父类型。没有例外。该字段值为零,这是预期的。为什么我创建的 SOAP 反序列化器和普通反序列化器可以正常工作?