viernes, 7 de enero de 2011

Devolver colección de objetos en formato JSON desde ASP.NET

Para pasar una colección de objetos a formato JSON serializamos mediante la clase JavaScriptSerializer(contenida en System.Web.Script.Serialization):


//Controlador .ashx
public void ProcessRequest (HttpContext context) {
//...

List<Libro> lista = new List<Libro>()
{
new Libro(){ ISBN = "123456789", Titulo = "Cien Años de Soledad",Autor = "Gabriel García Márquez"},
new Libro(){ISBN = "756753321",Titulo = "Pedro Páramo",Autor ="Juan Rulfo"},
new Libro(){ISBN = "655902123",Titulo = "El Aleph",Autor ="Jorge Luis Borges"}
};

//Pasamos la colección a formato JSON. Se guardará en jsonLista:
StringBuilder jsonLista = new StringBuilder();
JavaScriptSerializer js = new JavaScriptSerializer();
js.Serialize(lista, jsonLista);

//Devolvemos al cliente la colección:
context.Response.ContentType = "text/plain";
context.Response.Write(jsonLista.ToString());
}
...
//La clase Libro:
public class Libro
{
public string ISBN {get;set;}
public string Titulo {get;set;}
public string Autor {get;set;}
}

En el cliente, leemos la colección JSON devuelta por el servidor:


...

$.post("../Controladores/MiControlador.ashx", { Data: "ObtenerLibros"},
function (response) {
if (response.length > 0) {
LeeColeccionJSON(response);
}
});

...

function LeeColeccionJSON(response)
{
//pasamos la colección JSON a un array de objetos javascript:
var arr = eval(response);

//Leyendo array:
for(int i=0; i< arr.length; i++)
{
alert("Libro: " + arr[i].Titulo);
}
}

No hay comentarios:

Publicar un comentario