2

我最近遇到了一个 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 反序列化器和普通反序列化器可以正常工作?

4

2 回答 2

2

这是正常和预期的;空白字符串作为整数无效,无法解析。XmlSerializer行为相同:

using System.IO;
using System.Xml.Serialization;

static class Program {
    static void Main() {
        var obj = new XmlSerializer(typeof(Foo)).Deserialize(
            new StringReader("<Foo><TransID></TransID></Foo>"));
    }
}
public class Foo
{
    public int TransID { get; set; }
}
于 2012-11-07T23:19:07.870 回答
0

IMO 你应该将你的属性声明为 Nullable:

public int? TransID { get; set; }

这应该足以使其在序列化和反序列化对象时工作

于 2012-11-15T16:07:03.600 回答