2012-04-11 2 views
1

je reçois une réponse de savon du service:réponse de savon Désérialisation 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 Le fichier ne spécifie pas un type de retour. Comment puis-je désérialiser ces messages en C#? Le nombre de "item" et "Map" n'est pas connu. Doit être similaire à cet exemple:

[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; 
} 

Répondre

2

Dans votre projet, vous devez ajouter une référence au service Web.
De cette façon, un wrapper pour webservice est créé automatiquement, vous permettant d'appeler ses méthodes et d'obtenir des réponses en utilisant des classes dans wrapper.
La sérialisation et la désérialisation sont transparentes pour vous.

+2

Ceci est un problème. Le fichier wsdl ne spécifie pas de type de retour. Je veux le décrire moi-même. – Aleksey