Cómo permitir que un archivo ASMX genere JSON

Resuelto doekman asked hace 15 años • 6 respuestas

Creé un archivo ASMX con un archivo de código subyacente. Está funcionando bien, pero genera XML.

Sin embargo, lo necesito para generar JSON. La configuración de ResponseFormat no parece funcionar. Mi código subyacente es:

[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
    public string[] UserDetails()
    {
        return new string[] { "abc", "def" };
    }
}
doekman avatar Oct 17 '08 14:10 doekman
Aceptado

Para recibir una cadena JSON pura, sin que esté empaquetada en un XML, debe escribir la cadena JSON directamente en HttpResponsey cambiar el WebMethodtipo de retorno a void.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }
iCorrect avatar Nov 22 '2012 11:11 iCorrect

Desde WebService devuelve XML incluso cuando ResponseFormat está configurado en JSON :

Asegúrese de que la solicitud sea una solicitud POST, no una GET. Scott Guthrie tiene una publicación que explica por qué .

Aunque está escrito específicamente para jQuery, esto también puede resultarle útil:
Uso de jQuery para consumir servicios web ASP.NET JSON

Pavel Chuchuva avatar Oct 17 '2008 10:10 Pavel Chuchuva

Probablemente ya sean noticias viejas, pero la magia parece ser:

  • Atributo [ScriptService] en la clase de servicio web
  • [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] en el método
  • Tipo de contenido: aplicación/json en solicitud

Con esas piezas en su lugar, una solicitud GET se realiza correctamente.

Para una publicación HTTP

  • [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] en el método

y en el lado del cliente (asumiendo que su método web se llama MethodName y requiere un único parámetro llamado searchString):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });
marc avatar Apr 18 '2012 16:04 marc