Saltar al contenido

Cómo obtener una respuesta JSON de un servicio web 3.5 asmx

Nuestros mejores desarrolladores agotaron sus provisiones de café, en su búsqueda diariamente por la resolución, hasta que Isabella encontró el resultado en GitHub y en este momento la compartimos con nosotros.

Solución:

Enfrenté el mismo problema e incluí el siguiente código para que funcione.

[WebMethod]
[ScriptMethod(UseHttpGet=true ,ResponseFormat = ResponseFormat.Json)]
public void HelloWorld()

    Context.Response.Clear();
    Context.Response.ContentType = "application/json";
    Context.Response.Write("Hello World");
    //return "Hello World";

Actualizar:

Para obtener un formato json puro, puede usar el serializador javascript como se muestra a continuación.

public class WebService1 : System.Web.Services.WebService

    [WebMethod]
    [ScriptMethod(UseHttpGet=true ,ResponseFormat = ResponseFormat.Json)]
    public void HelloWorld()
    
        JavaScriptSerializer js = new JavaScriptSerializer();
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";           
        HelloWorldData data = new HelloWorldData();
        data.Message = "HelloWorld";
        Context.Response.Write(js.Serialize(data));


    


public class HelloWorldData

   public String Message;

Sin embargo, esto funciona para tipos complejos, pero string no muestra ninguna diferencia.

Estimados futuros lectores: La respuesta actualmente aceptada no es la correcta. Te ata a usar el JavaScriptSerializer y pierde la capacidad de solicitar xml (o, de hecho, cualquier formato de serialización que pueda aparecer en el futuro). ¡La “manera correcta” también implica menos código!

Si decoras tu clase de servicio con el [ScriptService] attribute – que tienes – entonces ASP.NET 3.5+ debería serializar automáticamente la respuesta a JSON proporcionó su Solicitudes de llamada Ajax JSON. Las sugerencias para serializar a JSON manualmente son simplemente incorrectas, a menos que desee utilizar un serializador diferente como Newtonsoft.

Que estabas viendo XML sugiere uno de los siguientes:

  • No está solicitando JSON en su llamada Ajax; consulte el código de ejemplo de trabajo a continuación
  • Posiblemente falten algunas entradas de web.config, de acuerdo con una respuesta aquí (descargo de responsabilidad: no tengo la mayoría de estos en un web.config de producción; solo comience a jugar con estos si nada más funciona)

Aquí hay un ejemplo de trabajo simple de un servicio web ASMX habilitado para JSON:

<%@ WebService Language="C#" Class="WebService" %>
using System;
using System.Collections.Generic;
using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService 
    [WebMethod]
    public MyClass Example()
    
        return new MyClass();
    

    public class MyClass
    
        public string Message  get  return "Hi";  
        public int Number  get  return 123;  
        public List List  get  return new List  "Item1", "Item2", "Item3" ;  
    

JavaScript para solicitarlo y procesar la respuesta (simplemente mostraremos una alerta JS con el mensaje de MyClass.Message):



    Test
      


    


Solicitud HTTP:

POST http://HOST.com/WebService.asmx/Example HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://HOST.com/Test.aspx
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Connection: Keep-Alive
Content-Length: 3
Host: HOST.com

 

Respuesta HTTP:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 20 Feb 2018 08:36:12 GMT
Content-Length: 98

"d":"__type":"WebService+MyClass","Message":"Hi","Number":123,"List":["Item1","Item2","Item3"]

Resultado:

“Hola” se muestra en una ventana emergente de JS.

Aquí tienes las reseñas y calificaciones

No se te olvide dar difusión a este artículo si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *