¿Enviar JSON a webmethod?

¿Cómo puedo enviar un objeto JSON a un método web utilizando jQuery?

Por favor, consulte este artículo de Dave Ward. Es un tutorial completo sobre cómo hacer esto. También encontrarás allí otras grandes cosas jquery / ASP.net.

EDITAR: – Dave está llamando al método sin ningún argumento, puede reemplazar la propiedad de datos vacía con los datos reales que desea enviar:

$.ajax({ type: "POST", url: "Default.aspx/GetDate", data: "{'name':'tiger1','hobbies':['reading','music']}",//PUT DATA HERE contentType: "application/json; charset=utf-8", dataType: "json", 

WebMethods espera una cadena que contenga JSON que se analizará en el lado del servidor. Utilizo la función JSON.stringify para convertir un objeto de parámetros en una cadena y enviar los datos. Tengo una función como esta:

 jQuery.executePageMethod = function(location, methodName, methodArguments, onSuccess, onFail) { this.ajax({ type: "POST", url: location + "/" + methodName, data: JSON.stringify(methodArguments), // convert the arguments to string contentType: "application/json; charset=utf-8", dataType: "json", success: function(data, status) { var jsonData = JSON.parse(data.d); onSuccess(jsonData, status); }, fail: onFail }); }; 

Te recomiendo que incluyas el analizador json2.js en tus páginas, para que la función JSON.stringify esté disponible en todos los navegadores.

Otra biblioteca que puedes usar es la biblioteca jquery-json . Una vez incluido:

 var json = $.toJSON(your_object); 

Las soluciones más convenientes que he visto simplifican esto mediante el uso de la biblioteca JSON2.js de código abierto para analizar y “estrechar” datos de objetos complejos.

Estos dos excelentes artículos entran en detalle:

  • Usar tipos complejos para hacer que los servicios de llamadas sean menos … complejos por Dave Ward.

  • Arrays de JavaScript a través de JQuery Ajax en un método Web Asp.Net por Chris Brandsma.

El segundo artículo puede ser especialmente relevante para usted, aunque llama a un método de servicio web con la siguiente firma …

 public void SendValues(List list) 

… muestra cómo usar la biblioteca JSON2.js para representar una List en javascript (usando jQuery, este ejemplo se toma directamente del segundo artículo):

 var list = ["a", "b", "c", "d"]; var jsonText = JSON.stringify({ list: list }); // The 'list' is posted like this $.ajax({ type: "POST", url: "WebService1.asmx/SendValues", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function() { alert("it worked"); }, failure: function() { alert("Uh oh"); } }); 

Solo use la URL de su método web en lugar del servicio web.

Necesitará publicarlo utilizando Ajax y aceptar la cadena entrante en el método web. Entonces necesitarías usar el deserializador de JavaScript para convertirlo en un objeto en el lado del servidor.

JSON.stringify ayuda, pero:

  1. no es un navegador cruzado, eche un vistazo aquí: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#

  2. Para las funciones integradas del navegador, cada navegador tendrá sus problemas. Si utiliza la serialización anterior, deberá:

    • eliminar nuevas líneas con expresiones regulares en cadenas
    • cuidate de “en cuerdas

El código de muestra está aquí:

 var dataString = JSON.stringify({ contractName: contractName, contractNumber: contractNumber }); $.ajax({ type: "POST", url: "CreateQuote.aspx/GetCallHistory", data: dataString, contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { alert(result.CallHistoryDescription); OpenLightBox('divDelete'); } }); [System.Web.Services.WebMethod] public static object GetCallHistory(string contractName, string contractNumber) { return new { CallHistoryDescription = "Nalan" }; }