'错误序列化身体'。通过.NET 3.5调用Fedex Web服务的问题

时间:2008-12-05 22:37:39

标签: .net web-services

我正在使用联邦快递的网络服务,并且在我真正能够到达任何地方之前预先得到一个恼人的错误。

序列化消息addressValidationRequest1的主体时出错:'无法生成临时类(result = 1)。 错误CS0030:无法将类型“FedEx.InterOp.AddressValidationServiceReference.ParsedElement []”到“FedEx.InterOp.AddressValidationServiceReference.ParsedElement” 错误CS0029:无法隐式转换类型“FedEx.InterOp.AddressValidationServiceReference.ParsedElement”到“FedEx.InterOp.AddressValidationServiceReference.ParsedElement []” ”。有关详细信息,请参阅InnerException。

我使用.NET 3.5,让我产生一个可怕的名为类(我不知道为什么它不只是AddressValidationService):

AddressValidationPortTypeClient addressValidationService = new ...;

在这个课上我打电话给我:

addressValidationService.addressValidation(request);

这是我收到此错误的时间。

我能找到这个错误的唯一参考来自古老的1.1项目。在我的情况下,我的DLL引用了System.Web和System.Web.Services,这在当时似乎是一个问题。

3 个答案:

答案 0 :(得分:19)

您只需要更改[] [],而不是单个[]。

在Reference.cs中更改

private ParsedElement[][] parsedStreetLineField;
to
private ParsedElement[] parsedStreetLineField;
and
public ParsedElement[][] ParsedStreetLine {
to
public ParsedElement[] ParsedStreetLine {

答案 1 :(得分:7)

原来,联邦快递自己的文档专门涵盖了这一点!

我使用Microsoft的wsdl.exe生成代码,我收到错误CS0029:无法将类型'fedexreq.ParsedElement'隐式转换为'fedexreq.ParsedElement []'。

这是由Web服务描述语言工具(Wsdl.exe)生成的错误,用于生成客户端信息。当您发布包含maxOccurs属性设置为“unbounded”值的嵌套节点的架构时,Wsdl.exe工具会在生成的代码文件中创建多维数组。因此,生成的代码包含嵌套节点的不正确类型。要解决从数据类型delectation语句中删除括号([])数组字符来修改生成的代码。有关详细信息,请参阅http://support.microsoft.com/kb/326790/en-ushttp://support.microsoft.com/kb/891386

答案 2 :(得分:6)

注意:要访问Simon_Weaver所指的Reference.cs文件,请在visual studio中打开该项目,然后在Solution Explorer中单击Web Reference,然后查看Solution Explorer顶部的小图标。单击“显示所有文件”图标以显示隐藏文件。现在展开Web引用,然后在里面展开Reference.map,最后你会看到你可以编辑的Reference.cs,用[]

替换[] []

请勿将此Reference.cs与您在下载示例代码时从Fedex获得的Reference.cs混淆。