consumir jquery .net asp.net ajax web-services

jquery - consumir - web service c# json



Cómo devolver JSON desde un servicio web 2.0 asmx (7)

Estoy usando .Net framework 2.0 / jQuery para hacer una llamada Ajax a un servicio web 2.0. No importa en qué establezca el tipo de contenido en la llamada ajax, el servicio siempre devuelve XML. ¡Quiero que regrese Json!

Aquí está la llamada:

$(document).ready(function() { $.ajax({ type: "POST", url: "DonationsService.asmx/GetDate", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Hide the fake progress indicator graphic. $(''#RSSContent'').removeClass(''loading''); // Insert the returned HTML into the <div>. $(''#RSSContent'').html(msg.d); } }); });

Aquí está cómo se ve el encabezado de solicitud en Fiddler:

POST /DonationsService.asmx/GetDate HTTP/1.1 x-requested-with: XMLHttpRequest Accept-Language: en-us Referer: http://localhost:1238/text.htm Accept: application/json, text/javascript, */* Content-Type: application/json; charset=utf-8 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; eMusic DLM/4; .NET CLR 2.0.50727) Host: localhost:1238 Content-Length: 2 Connection: Keep-Alive Pragma: no-cache

Intenté configurar el contentType en ''text / json'' y obtuve los mismos resultados.

Aquí está el método de servicio web:

<WebMethod()> _ Public Function GetDate() As String ''just playing around with Newtonsoft.Json Dim sb As New StringBuilder Dim sw As New IO.StringWriter(sb) Dim strOut As String = String.Empty Using jw As New JsonTextWriter(sw) With jw .WriteStartObject() .WritePropertyName("DateTime") .WriteValue(DateTime.Now.ToString) .WriteEndObject() End With strOut = sw.ToString End Using Return strOut End Function

y aquí está lo que devuelve:

<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://DMS.Webservices.org/">{"DateTime":"11/13/2008 6:04:22 PM"}</string>

¿Alguien sabe cómo forzar al servicio web a devolver a Json cuando pregunto por Json?

Por favor, no me digan que actualice a .Net Framework 3.5 o algo por el estilo (no soy tan estúpido). Necesito una solución 2.0.


La respuesta está envuelta en un elemento porque tu método dice que devolverá una cadena. Puede usar esto para poder enviar json simple, pero su wsdl será engañado (la función es nula pero responde los datos).

[WebMethod(Description="return pure JSON")] public void retrieveByIdToPureJSON( int id ) { Context.Response.Write( JsonConvert.SerializeObject( mydbtable.getById(id) ); }

Buena suerte, tom

Por cierto: ver Newtonsoft.Json para JsonConvert


Necesita decorar su método web con lo siguiente:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

Tienes el resto bien :)

Más información en Encosia y Andrew Roland''s Blog

EDITAR: Como se indica a continuación, esto es solo .NET 3.5 (no estaba al tanto de esto, mi mal).



Probablemente no pueda hacer nada más que XML o serialización binaria en .NET 2.0. Si no está utilizando una referencia web autogenerada, no se moleste con ASMX. Simplemente use un ASPX o ASHX en su lugar.


Puede que no sea 100% correcto en esto, pero estoy seguro de que los servicios web .net están basados ​​en XML / SOAP.

Debería anular el comportamiento predeterminado del servicio web. No estoy del todo seguro de que esto sea posible.

Sé que esta no será la respuesta más útil, pero puede llevarlo en la dirección correcta.


Puede usar la biblioteca de Jayrock Inicio rápido para asp.net

Esto te permite escribir un manejador de http para devolverte el json.

<%@ WebHandler Class="JayrockWeb.HelloWorld" %> namespace JayrockWeb { using System; using System.Web; using Jayrock.Json; using Jayrock.JsonRpc; using Jayrock.JsonRpc.Web; public class HelloWorld : JsonRpcHandler { [ JsonRpcMethod("greetings") ] public string Greetings() { return "Welcome to Jayrock!"; } } }


También es posible escribir su propio convertidor JSON rápido con Refelction.

Dim sb As New StringBuilder("{") For Each p As PropertyInfo In myObject.GetType().GetProperties() sb.Append(String.Format("""{0}"":""{1}"",", p.Name, p.GetValue(myObject, Nothing).ToString())) Next p //remove the last "," because it''s uneeded. sb.Remove(sb.Length - 1, 1) sb.Append("}")