Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

JSON con ASP.NET II

Por petición popular voy a ampliar el artículo que dedique en su día a la clase DataContractJsonSerializer la cual podemos utilizar para serializar o deserializar objetos JSon a objetos .NET.

En este artículo explicaré como pasar una colección de objetos JSON al servidor mediante ASP.Net AJAX de una forma muy sencilla.

Puedes ojear el artículo inicial en : serializar-deserializar-json-en-asp-net

Simplemente ampliaré el ejemplo que ya utilicé en el primer artículo, para que podamos seleccionar varios registros de la grid y posteriormente pasar esta lista de objetos al servidor utilizando un método accesible desde el cliente “PageMethod” con ASP.NET AJAX.

ser2

Este “PageMethod” es muy sencillo, simplemente espera una colección de objetos ProductoData.

Por defecto nuestro método utilizará el formato JSon para recibir los datos, pero he dejado el atributo ResponseFormat para que veáis como se puede especificar si queremos utilizar XML o JSON para nuestro tratamiento de los datos.

En esta imagen podéis comprobar como nuestra colección de objetos llega perfectamente deserializado y convertido a nuestra lista de objetos ProductoData.

ser

Como podéis comprobar en el servidor no nos tenemos que preocupar de convertir los datos que recibimos del cliente, porque es totalmente transparente para nosotros.

La parte donde lo tendremos un poquito más difícil es en el script del cliente, que tiene que formatear los datos en un correcto objeto JSON y enviar los datos al servidor.

function BorrarSeleccionados( ) {

    var ProductoDataList = new Array();
    $("#tableproductos tr td :checked").each(function() {

    ProductoDataList.push('{"ProductID":'
        + $(this).parent().next()[0].innerText + 
        ', "ProductName":"' 
        + $(this).parent().next().next()[0].innerText +
        '", "UnitPrice":' 
        + $(this).parent().next().next().next()[0].innerText +
        ', "UnitsInStock":' 
        + $(this).parent().next().next().next().next()[0].innerText + ' }');

    });

    var productos = JSON.parse(
      '[' + ProductoDataList.toLocaleString().replace(/;/g, ",")+ ']');
PageMethods.BorrarSeleccionados(productos, BorrarSeleccionadosOK, BorrarSeleccionadosKO); }

Esta función JavaScript utiliza JQuery para recorrer la grid en busca de los elementos seleccionados “checked”. Crea un Array de objetos al cual iremos añadiendo los elementos seleccionados dando el formato JSon que necesitamos para generar nuestro objeto ProductoData “ProductID, ProductName, UnitPrice, UnitsInStock”.

Luego utilizaremos la clase JSON para parsear el Array en un Objeto JSON correctamente formado y gracias a esta clase no tenemos que utilizar el famoso eval de JavaScript evitando los problemas de seguridad.

Finalmente pasamos el objeto JSON obtenido al método de servidor que recogerá los datos y ya tenemos el ejemplo 100% funcionando.

ser3

Realmente utilizar el formato de datos JSON con ASP.NET AJAX es realmente fácil, únicamente se nos puede complicar un poco la cosa con la parte de dar formato a los datos en el cliente.

Espero que os sea útil este pequeño ejemplo y a los que me habéis pedido esta explicación ya me comentareis si esto es lo que necesitabais.

Algunas Referencias relacionadas con el artículo:

http://www.json.org/js.html

http://jquery.com/

CrossPosting: http://mrubino.net

 

Posted: 8/7/2009 0:23 por Marc Rubiño | con 5 comment(s)
Comparte este post:

Comentarios

Luis ha opinado:

De que sirve que pongas todo eso si no pasas el fuente :s

# June 14, 2010 4:53 PM

Dan Quinde ha opinado:

Excelente aporte, sólo una cosa el link de la 1era parte no funciona pls ayúdanos con eso de antemano, mis agradecimientos

# June 24, 2011 4:01 PM

matt ha opinado:

hola me da error de sintaxis

var productos = JSON.parse(

     '[' + ProductoDataList.toLocaleString().replace(/;/g, ",")+ ']');

¿que esta mal?

# July 5, 2011 4:29 AM

Walter ha opinado:

Un favor el link de la primera parte del ejemplo está mal reparalo, gracias, excelente ejemplo.

# July 12, 2011 6:15 PM

ferfsc ha opinado:

un favor...puedes colocar los fuentes del ejemplo.. para q podamos ver a mas detalle el ejemplo.. gracias

# September 29, 2011 6:32 PM