I realise this is somewhat old but I too was banging my head at this problem where even though the output type was specified as Json it was still being wrapped in XML. The problem with the solutions above for me was that I needed for it to be called by a GET.
The solution while not using a web service does the job for me.
What I did was just create another aspx page and added it to my project, in the aspx page I built up the json object and did the following (All inside the Page_Load method):
Response.ContentType = "application/json";
Response.Write(JsonObject.ToString());
Response.End();
Then to call the "page" from the client you simply use the URL eg. "http://aspjsonpage.aspx?parameter=value"
And you get the Json you need.