如何将SoapObject转换或反序列化到我的对象?

问题描述:

我有一个.Net Webservice,返回一个简单的序列化对象。如何将SoapObject转换或反序列化到我的对象?

我有以下代码从我NET Web服务响应。我如何反序列化返回的XML到我的对象?

我想返回MyObject而不是SoapPrimitive。

private static SoapPrimitive callWebServiceMethod(String url, 
      String namespace, String methodName, 
      HashMap<String, Object> parameters, String soapAction) 
      throws Exception { 

     Log.i("WebService", "URL: " + url); 
     Log.i("WebService", "MethodName: " + methodName); 

     URL myurl = new URL(url); 
     URLConnection connection = myurl.openConnection(); 
     connection.setConnectTimeout(20 * 1000); 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     int responseCode = httpConnection.getResponseCode(); 
     if (responseCode == HttpURLConnection.HTTP_OK) 
     { 
      httpConnection.disconnect(); 
      SoapObject request = new SoapObject(namespace, methodName); 

      if (parameters != null) { 
       String[] keys = new String[0]; 
       keys = (String[]) parameters.keySet().toArray(keys); 
       Object[] vals = (Object[]) parameters.values().toArray(); 

       for (int i = 0; i < parameters.size(); i++) { 
        request.addProperty(keys[i], vals[i]); 
        Log.i("WebService", keys[i] + ": " + vals[i]); 
       } 
      } 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
      envelope.dotNet = true; 

      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(url, 
        TimeOutInSeconds * 1000); 

      androidHttpTransport.call(soapAction, envelope); 
      return (SoapPrimitive) envelope.getResponse(); 
     } 
     else 
     { 
      httpConnection.disconnect(); 
      throw new Exception(
        "Http Error code: " + String.valueOf(responseCode)); 
     } 

    } 

我还没有很好地理解,但我想你想你的方法应该返回您的自定义类,而不是SOAP对象的对象。

所以我已经做了我类似的功能这样的..

SoapObject soapObject = (SoapObject) envelope.getResponse(); // SOAP Object 
    realTimeUtil = new RealTimeUtil(); // CUSTOM Object of My Class 
     if(soapObject.hasProperty("diffgram")) 
      soapObject = (SoapObject) soapObject.getProperty("diffgram"); 
       if(soapObject.hasProperty(clientName)){ 
        soapObject = (SoapObject) soapObject.getProperty(clientName); 
         for (int i = 0 ; i<soapObject.getPropertyCount(); i++){ 
           if(soapObject.hasProperty(clientName)){       
           SoapObject soapObject1 = (SoapObject) soapObject.getProperty(i); 
            if(soapObject1.hasProperty("Site")){ 

             String site = soapObject1.getProperty("Site").toString(); 
             String dateTime = soapObject1.getProperty("DateTime").toString(); 
             String clicks =soapObject1.getProperty("Clicks").toString(); 
             String orders = soapObject1.getProperty("Orders").toString(); 
             String reveneue = soapObject1.getProperty("Revenue").toString(); 
             String items = soapObject1.getProperty("Items").toString(); 

             realTimeUtil.setSite(site); 
             realTimeUtil.setClicks(clicks); 
             realTimeUtil.setDateTime(dateTime); 
             realTimeUtil.setOrders(orders); 
             realTimeUtil.setRevenue(reveneue); 
             realTimeUtil.setItem(items); 
                           } 
          } 
         } 
       } 
     return realTimeUtil; 

RealtimeUTil是一个自定义类,在我与几个变量的应用程序,它的消气setter方法。

+1

是否有反序列化XML响应,而不是循环性能上任何其他方法? – breceivemail 2012-01-30 10:38:52

+0

没有更多的SOAP解析经验.. :) – MKJParekh 2012-01-30 10:40:59