当前位置: 代码迷 >> C# >> C#的项目引用外部返回数据类型为 string[][] 二维数组的web services报错
  详细解决方案

C#的项目引用外部返回数据类型为 string[][] 二维数组的web services报错

热度:39   发布时间:2016-05-05 03:10:47.0
C#的项目引用外部返回数据类型为 string[][] 二维数组的web services出错
VS2010里的一个C#项目,引用外部的一个web services,不知道什么系统建的,其中有一个方法,返回的数据类型是string[][] 二维字符串数组,用soapUI引用 这个web services,调用返回都正常。
看一下wsdl的一部分:

 <complexType name="ArrayOfArrayOf_xsd_string">
- <complexContent>
- <restriction base="soapenc:Array">
  <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[][]" />     <-- string[][] 类型在这,是返回的数据类型
  </restriction>
  </complexContent>
  </complexType>
  <element name="ArrayOfArrayOf_xsd_string" nillable="true" type="impl:ArrayOfArrayOf_xsd_string" /> 
  <element name="string" nillable="true" type="xsd:string" /> 
  <element name="getPageInfoReturn" type="xsd:int" /> 

soapUI调用返回正常的结果:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   <soapenv:Body soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <p983:getPublicInterfaceResponse xmlns:p983="http://publicinterface.services.cbos2.nbport.com">
         <getPublicInterfaceReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[3,4]">   <-- 这里显示返回的结果是string[][] 类型
            <item xsi:type="xsd:string">OPERATE_TYPE</item>
            <item xsi:type="xsd:string">OPERATE_TYPE_NAME</item>
            <item xsi:type="xsd:string">CUSTOMER_TYPE</item>
            <item xsi:type="xsd:string">DOWNLOAD_TIMESTAMP</item>
            <item xsi:type="xsd:string">1</item>
            <item xsi:type="xsd:string">作业方式1</item>
            <item xsi:type="xsd:string">S</item>
            <item xsi:type="xsd:string">20150713124123</item>
            <item xsi:type="xsd:string">2</item>
            <item xsi:type="xsd:string">作业方式2</item>
            <item xsi:type="xsd:string">S</item>
            <item xsi:type="xsd:string">20150713124123</item>
         </getPublicInterfaceReturn>
      </p983:getPublicInterfaceResponse>
   </soapenv:Body>
</soapenv:Envelope>

但是在C#项目里引用web services,引用也正常,能生成本地代理类,但是生成的代理类的返回结果是string[]类型:
public string[] getPublicInterface(string userid, string pwd, string interfaceType, string filter1, string filter2, string filter3, string filter4)

代码中执行这个方法,结果是出错:
Error in deserializing body of reply message for operation 'getPublicInterface'.

更detail的错误信息:
{"SOAP-ENC:arrayType with multidimensional array found at <getPublicInterfaceReturn xmlns=''>. Only single-dimensional arrays are supported. Consider using an array of arrays instead.\r\nParameter name: value"}

各位,dotnet的项目怎么引用返回数据类型为string[][]的web services?
------解决思路----------------------
string[][]和string[,]不是同一个类型

string[][]是锯齿数组
string[,]是矩阵
------解决思路----------------------
string[,]是一个标准的二维数组,是矩阵
而string[][]是一维数组里面又包含了一维数组
------解决思路----------------------
引用:
服务端是外部提供,我们不能改的,只可以在自己这头想办法。


这个必须修改服务端吧。因为你的异常已经提示的非常清楚了。 
看看这个链接:http://www.360doc.com/content/12/1217/10/1472642_254523537.shtml
------解决思路----------------------
实在不行,你就post报文,然后自己解析xml吧……
反正你也知道是锯齿二维数组了
  相关解决方案