5

I need my web service to return JSON...

I have the following code in my .asmx file:

namespace Feed
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    [System.Web.Script.Services.ScriptService]
    public class searchPerson : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public Person GetDave()
            {
                Person dave = new Person();

                dave.FirstName = "Dave";
                dave.LastName = "Ward";

         return dave;
        }
    }
}

Which returns the following:

<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <FirstName>Dave</FirstName>
  <LastName>Ward</LastName>
</Person>

How do I force it to return JSON instead of XML?

Mikael
  • 5,429
  • 5
  • 30
  • 38
  • If you need JSON and not XML, why do you have a namespace defined? – Oded Nov 20 '11 at 22:00
  • Looks like it's setup for both right now.. Can you go to YourPage.asmx/js and see a Javascript proxy script? – Mike Christensen Nov 20 '11 at 22:02
  • @MikeChristensen Yes that is possible – Mikael Nov 20 '11 at 22:06
  • So how are you calling it? It's usually best just to include the proxy Javascript file, which will set the content type to application/json and set everything up correctly. – Mike Christensen Nov 20 '11 at 22:12
  • @MikeChristensen Sorry but I'm not sure about how I do that, could you please explain. I try to read the data from my web service by posting the request at http://jsonviewer.stack.hu/ – Mikael Nov 20 '11 at 22:33
  • Take a look at this example. http://debugmode.net/2011/05/15/wcf-rest-service-with-josn-data/. – Chad Nov 20 '11 at 23:04

2 Answers2

5

Your webservice definition looks correct. Ensure that you are calling the service through a post and remember that the key is specifying the 'content type' header as application/json.

(This is using jQuery but you could use low level javascript if you like)

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8;",
    url: "http://MyWebServiceURL",
    data: JSON.stringify({ ParameterName: "DataToSend" }),
    dataType: "json",
    success: function (data, textStatus, jqXHR) {
        //do something
    },
    error: function (jqXHR, textStatus, errorThrown) {
        //fail nicely
    }
});
Maxim Gershkovich
  • 45,951
  • 44
  • 147
  • 243
  • This showed that the web service was working, the problem was how I called it from my iPhone application. – Mikael Nov 21 '11 at 19:31
1

Add the below referances before starting:

using System.Web.Script.Services;
using System.Web.Script.Serialization;

Use the below code in your method, for converting any data into JSON Data format in end:

JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(empData);

empData is array of DataRows from DataTable.