Create an ASP.net WebService that returns JSON instead of XML

Maybe the method returns how it should, but I basically just made a test method similar to this

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

When I hit this from my Android app, I get an exception like this

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

I thought this method will only return direct JSON, but this is what the web service method returns

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

Is this supposed to be like that? Is there a way to remove XML material that is outside of JSON? I'm not sure what I need to do in my web service in order to return the correct data format.

Using Android code to call a web service

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

then I would call this method somewhere in the code like

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

Source: https://habr.com/ru/post/919441/


All Articles