Retornar JSON do serviço da web ASMX, sem o wrapper XML?

Eu preciso obter dados Json de um serviço da Web c #.

Eu sei que há várias perguntas baseadas nisso, confie em mim, eu li algumas, mas apenas para me confundir ainda mais.

Isso é o que eu fiz:

Em meu serviço da Web, incluí: [System.Web.Script.Services.ScriptService] para a class & [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] para o método

Eu também usei um JavaScriptSerializer() para converter meus dados em uma string

Eu estou chamando esse serviço usando $.getJSON()

Se eu não usar, recebo um erro de referência entre domínios.

Para fazer isso eu tive que configurar o serviço m para obter o nome da function de retorno de chamada, então eu estou passando t his.Context.Request["callback"] + serializado Json Data;

Mas na saída eu entendi envolto em

  

Os dados dentro das tags estão no formato que eu preciso

Também tentei configurar o tipo de conteúdo usando: $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});

Mas ainda não há sucesso.

Adicionada mais tarde: Eu aceitei a resposta de Frenchie, porque eu sei que é a abordagem correta, mas eu ainda não consegui fazê-lo funcionar … Acabei de colocar o webservice & website no mesmo domínio e usei xml, sei que não era o melhor caminho, mas eu tinha passado 2 dias e não podia desperdiçar mais.

Usa isto:

 var JsonString = ....; $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "YourWebServiceName.asmx/yourmethodname", data: "{'TheData':'" + JsonString + "'}", dataType: "json", success: function (msg) { var data = msg.hasOwnProperty("d") ? msg.d : msg; OnSucessCallBack(data); }, error: function (xhr, status, error) { alert(xhr.statusText); } }); function OnSuccessCallData(DataFromServer) { // your handler for success } 

e, no lado do servidor, no código por trás do arquivo gerado automaticamente na sua pasta AppCode, você escreve algo assim:

 using System.Web.Services; using System.Web.Script.Serialization; [System.Web.Script.Services.ScriptService] public class YourWebServiceName : System.Web.Services.WebService { [WebMethod] public string yourmethodname(string TheData) { JavascriptSerializer YourSerializer = new JavascriptSerializer(); // custom serializer if you need one YourSerializer.RegisterConverters(new JavascriptConverter [] { new YourCustomConverter() }); //deserialization TheData.Deserialize(TheData); //serialization TheData.Serialize(TheData); } } 

Se você não usar um conversor personalizado, as propriedades entre a cadeia json e a definição de class c # do object do lado do servidor devem corresponder para que a desserialização funcione. Para a serialização, se você não tiver um conversor personalizado, a cadeia do json includeá todas as propriedades da sua class c #. Você pode adicionar [ScriptIgnore] antes de uma definição de propriedade em sua class c # e essa propriedade será ignorada pelo serializador se você não especificar um conversor personalizado.