¿Devuelve JSON desde el servicio web ASMX, sin contenedor XML?

Necesito obtener datos Json de un servicio web C #.

Sé que hay varias preguntas basadas en esto, confía en mí. He leído bastantes pero solo para confundirme más.

Esto es lo que he hecho:

En mi servicio web he incluido: [System.Web.Script.Services.ScriptService] para la clase y [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] para el método

También he usado un JavaScriptSerializer() para convertir mis datos a una cadena

$.getJSON() este servicio usando $.getJSON()

Si no uso eso obtengo un error de referencia de dominio cruzado.

Para hacer esto, tuve que configurar el servicio m para obtener el nombre de la función de callback, así que estoy pasando his.Context.Request["callback"] + serialized Json Data;

Pero en la salida lo envuelvo en

  

Los datos dentro de las tags están en el formato que necesito

También intenté configurar el tipo de contenido usando: $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});

Pero aún no hay éxito.

Agregado después: acepté el artículo de Frenchie porque sé que es el enfoque correcto, pero aún no lo puse a funcionar … simplemente puse el servicio web y el sitio web en el mismo dominio y usé xml, sé que no fue la mejor manera, pero había pasado 2 días y no podía perder más.

Utilizar esta:

 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 } 

y luego, en el lado del servidor, en el código detrás del archivo que se genera automáticamente en su carpeta AppCode, escriba algo como esto:

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

Si no usa un convertidor personalizado, las propiedades entre la cadena json y la definición de la clase c # de su objeto del servidor deben coincidir para que funcione la deserialización. Para la serialización, si no tiene un convertidor personalizado, la cadena json incluirá todas las propiedades de su clase c #. Puede agregar [ScriptIgnore] justo antes de una definición de propiedad en su clase c # y esa propiedad será ignorada por el serializador si no especifica un convertidor personalizado.