2012-07-01 42 views
6

Có lẽ phương pháp này đang trở lại nó như thế nào nên, nhưng tôi về cơ bản chỉ cần thực hiện một phương pháp thử nghiệm mà trông như thế nàyTạo một WebService ASP.net trả về JSON thay vì XML

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string TestJSON() 
    { 
     var location = new Location[2]; 
     location[0] = new Location(); 
     location[0].Latitute = "19"; 
     location[0].Longitude = "27"; 
     location[1] = new Location(); 
     location[1].Latitute = "-81.9"; 
     location[1].Longitude = "28"; 

     return new JavaScriptSerializer().Serialize(location); 
    } 

Khi tôi nhấn này từ Android của tôi ứng dụng tôi nhận được một ngoại lệ như thế này

Value <?xml of type java.lang.String cannot be converted to JSONArray 

tôi nghĩ phương pháp này sẽ trở về JSON chỉ thẳng, nhưng đây là những gì các phương pháp dịch vụ web trả về

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">[{"Latitute":"19","Longitude":"27"},{"Latitute":"-81.9","Longitude":"28"}]</string> 

Giả sử như thế này? Có cách nào để loại bỏ các công cụ XML bên ngoài JSON? Tôi không chắc chắn những gì tôi phải làm trong webservice của tôi để làm cho nó trở lại đúng định dạng của dữ liệu

Mã Sử dụng trên Android để Gọi Webservice

public String readWebService(String method) 
{ 
    StringBuilder builder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet("http://myserver.com/WebService.asmx/" + method); 


    Log.d(main.class.toString(), "Created HttpGet Request object"); 

    try 
    { 
     HttpResponse response = client.execute(httpGet); 
     Log.d(main.class.toString(), "Created HTTPResponse object"); 
     StatusLine statusLine = response.getStatusLine(); 
     Log.d(main.class.toString(), "Got Status Line"); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
      } 

      return builder.toString(); 
     } else { 
      Log.e(main.class.toString(), "Failed to contact Web Service: Status Code: " + statusCode); 
     } 
    } 
    catch (ClientProtocolException e) { 
     Log.e(main.class.toString(), "ClientProtocolException hit"); 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     Log.e(main.class.toString(), "IOException hit"); 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     Log.e(main.class.toString(), "General Exception hit"); 
    } 

    return "WebService call failed";  
} 

sau đó tôi sẽ gọi phương thức đó ở đâu đó trong mã như

try { 
    JSONArray jsonArray = new JSONArray(readWebService("TestJSON")); 
    Log.i(main.class.toString(), "Number of entries " + jsonArray.length()); 
     .... 
} 
... 
+0

Bạn gọi điện thoại này từ android như thế nào? Bạn có đang chỉ định bất kỳ loại nội dung nào trong yêu cầu đó không? –

+0

Tôi đã không được nhưng tôi chỉ cố gắng thêm httpGet.setHeader ("Content-Type", "application/json"); khi tôi thêm điều này, webservice trả về mã trạng thái lỗi máy chủ 500. Tôi sẽ cập nhật câu hỏi của mình để bao gồm mã android tôi đang sử dụng để gọi phương thức dịch vụ web –

+0

Có vẻ như ai đó đang gặp sự cố tương tự mà tôi đã bỏ lỡ trong quá trình nghiên cứu mở rộng của tôi (5 phút googling) http://stackoverflow.com/question/2058454/asp-net-webservice-là-gói-my-json-reponse-với-xml-thẻ? rq = 1 ... dường như nó hoạt động nếu tôi sử dụng POST thay vì nhận được với các loại nội dung thiết lập để ứng dụng/json –

Trả lời

Các vấn đề liên quan