2012-04-11 13 views
1

私はサービスから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

プロジェクトでは、webserviceへの参照を追加する必要があります。
このようにして、Webサービス用のラッパーが自動的に作成され、そのメソッドを呼び出し、ラッパー内のクラスを使用して応答を取得できます。
シリアライズとデシリアライゼーションは、あなたにとって透過的です。

+2

これは厄介です。ファイルwsdlは戻り値の型を指定しません。私はそれを自分で説明したい。 – Aleksey

関連する問題