今天得到了FedEx的一个Web服务的WSDL文件,然后利用wsdl.exe生成了对应的访问代理类,然后添加到项目中,进行正确的赋值和调用之后,发现调用始终失败,原因是,其中的一些枚举值没有正确序列化,在序列化的结果中并没有这些设置好的枚举值。这很奇怪,明明我在代码中进行了赋值啊…… 最后,发现,原来是这样:
生成的代理类中为每个枚举类型的属性同时生成了一个bool类型的相关属性。比如对于“PackagingType”属性,同时生成一个bool类型的“PackagingTypeSpecified”属性,其默认值为false,如果此值为false,则对应的枚举属性不会出现在序列化的请求中。我想这可能是为了满足一种要求枚举值的结果为“null”或者不需要设置枚举值的需要。