2012-04-11 132 views
1

我從服務SOAP響應:反序列化SOAP響應C#

<SOAP-ENV:Body> 
    <ns1:getCurrencyListResponse> 
     <getCurrencyListReturn SOAP-ENC:arrayType="ns2:Map[2]" xsi:type="SOAP-ENC:Array"> 
      <item xsi:type="ns2:Map"> 
       <item> 
        <key xsi:type="xsd:string">id</key> 
        <value xsi:type="xsd:string">18</value> 
       </item> 
       <item> 
        <key xsi:type="xsd:string">name</key> 
        <value xsi:type="xsd:string">USD</value> 
       </item> 
      </item> 
      <item xsi:type="ns2:Map"> 
       <item> 
        <key xsi:type="xsd:string">id</key> 
        <value xsi:type="xsd:string">19</value> 
       </item> 
       <item> 
        <key xsi:type="xsd:string">name</key> 
        <value xsi:type="xsd:string">EUR</value> 
       </item> 
      </item> 
     </getCurrencyListReturn> 
    </ns1:getCurrencyListResponse> 
</SOAP-ENV:Body> 

文件WSDL沒有指定返回類型。我如何在C#中反序列化這些消息? 「項目」和「地圖」的數量不知道。應該類似於這個例子:

[SoapType(Namespace = "http://xml.apache.org/xml-soap", TypeName = "Map")] 
public class Map 
{ 
    public item[] item; 
} 

public class item 
{ 
    [SoapElement] 
    public string key; 

    [SoapElement] 
    public string value; 
} 

回答

2

在你的項目中,你應該添加一個對web服務的引用。
通過這種方式,webservice的包裝會自動創建,讓您調用其方法並使用包裝內的類獲取響應。
序列化和反序列化對您而言是透明的。

+2

這是一個分支。文件wsdl不指定返回類型。我想自己描述一下。 – Aleksey 2012-04-11 13:02:48