Ir al contenido principal

Serializar a JSON en .NET


En este articulo vamos a mostrar un ejemplo de como conseguir serializar clases de .NET en el formato de java script: JSON. Como verán a continuación es extremadamente simple.
Vamos a realizar con VS2008 un proyecto de tipo web site de ASP.NET. Utilizaremos como librería cliente jQuery, por lo que necesitamos añadimos la referencia a la librería – que podemos descargar desde el sitio oficial de jQuery http://www.jquery.com/. Tras descargar el archivo lo incluiremos en nuestro proyecto – en mi caso he incluido el archivo en la ruta “js/lib”.
<script src="js/lib/jquery.js" type="text/javascript"></script>
También podemos referenciar jQuery directamente desde los repositorios de Google o Microsoft.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" 
        type="text/javascript"></script>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" 
        type="text/javascript"></script>
Bien, una vez incluida la referencia a jQuery en el formulario (Default.aspx), diseñamos una sencilla página que tendrá  un formulario de búsqueda en la parte superior y en la parte inferior los resultados de dicha búsqueda.
Como utilizamos jQuery como librería de java script enlazamos el click de botón de búsqueda de forma no intrusiva (suponiendo que el botón buscar tenga btnBuscar como id) .
img1
<script language="javascript">

    $(document).ready(
        function() {
            $("#btnBuscar").click(
            btnBuscar_Click);
    });

    function btnBuscar_Click() {
       //De momento nada
    }

</script>

Por supuesto también podríamos haber enlazado el evento de la forma tradicional, es decir agregando el atributo onclick.
<input type="button" id="btnBuscar" value="Buscar" class="boton" onclick="btnBuscar_Click" />
Ahora nos centramos en la parte del servidor. Lo primero que necesitamos es una clase para serializarla en JSON, son los datos que vamos a devolver. Dada nuestra infinita imaginación usamos lo de siempre “DatosPersona” – nombre, apellidos, TipoDocumento y Documento. ¡Una alarde de creatividad!
class DatosPersona
{
    public string Nombre { get; set; }
    public string Apellidos { get; set; }
    public string TipoDocumento { get; set; }
    public string Documento { get; set; }   
}
A esta clase le añadimos un método ToJSON, que se va a encargar de serializar la clase al formato de java script.
class DatosPersona
{
    public string Nombre { get; set; }
    public string Apellidos { get; set; }
    public string TipoDocumento { get; set; }
    public string Documento { get; set; }

    public string ToJSON()
    {
        System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer
            = new System.Web.Script.Serialization.JavaScriptSerializer();
        return jsonSerializer.Serialize(this);

    }
}
Como podemos ver es el framework quien hace todo el trabajo, nosotros solo tenemos que crear una instancia de la clase JavaScriptSerializer  y serializar el objeto. Más fácil imposible.
Ahora nos centramos en el flujo de la página, tenemos que detectar la accion de buscar en el Page_Load(ya veremos luego como)  y generar la respuesta en el formato JSON:
protected void Page_Load(object sender, EventArgs e)
 {
     string accion = Request["accion"];
     if (accion == "BUSCAR")
     {
         int codpersona = 0;
         if(Int32.TryParse (Request["codpersona"], out codpersona ))
         {
             string datos = ObtenerPersona(codpersona);
             Response.ContentType = "application/json"; 
             Response.Write(datos);
             Response.End();
         }
     }
 }

 string ObtenerPersona(int codigoPersona)
 { 
     /*
      * En el mundo real usariamos el codigo de persona
      * para buscar en una base de datos!
      */
     DatosPersona persona = new DatosPersona
     {
         Nombre = "www.devjoker.com",
         Apellidos = "Programacion y +",
         TipoDocumento = "NIF",
         Documento = "000000" + codigoPersona + "P"
     };

     return persona.ToJSON();

 }
Si analizamos el código vemos que debemos enviar al servidor dos parametros accion y codpersona. Eso lo hacemos en la función del lado del cliente btnBuscar_Click que anteriormente habíamos dejado en blanco. Para obtener los datos usamos el método getJson de jQuery, y para poner los datos en pantalla utilizamos un callback. Por supuesto para que el programa funcione los id asignados a los controles de pantalla deben coincidir ( txtCodigoPersona, lblNombre, lblApellidos, lblTipoDocumento, lblDocumento)
function btnBuscar_Click() {
    var param = {
        "accion": "BUSCAR",
        "codpersona": $("#txtCodigoPersona").val()
    };

    $.getJSON("Default.aspx", param, function(returndata) {
        $("#lblNombre").text(returndata.Nombre);
        $("#lblApellidos").text(returndata.Apellidos);
        $("#lblTipoDocumento").text(returndata.TipoDocumento);
        $("#lblDocumento").text(returndata.Documento);               
    });                        
}
El programa en acción quedaría de la siguiente manera:
img2  Si analizamos la respuesta Http podemos ver como nuestra clase se ha serializamos perfectamente en JSON

HTTP/1.1 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Mon, 26 Apr 2010 14:11:19 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 105
Connection: Close

{"Nombre":"www.devjoker.com","Apellidos":"Programacion y +","TipoDocumento":"NIF","Documento":"0000004P"}
Como veis es un ejemplo muy simple pero también muy didáctico.

La fuente de esto ha sido: http://www.devjoker.com/contenidos/catss/459/Serializacioacuten-JSON-con-NET.aspx

Espero que lo disfruten, compartan y comenten. ;)

"Si se puede imaginar... se puede programar."

Comentarios

Entradas populares de este blog

Guía completa de .NET MAUI para el desarrollo de aplicaciones móviles multiplataforma

Guía completa de .NET MAUI para el desarrollo de aplicaciones móviles multiplataforma ⏱️ Tiempo de lectura: 30 minutos 🎯 Nivel: Intermedio ¡Prepárate para revolucionar el desarrollo móvil! Descubre .NET MAUI, el marco multiplataforma que te permite crear aplicaciones nativas para iOS, Android y escritorio con una sola base de código. Adéntrate en los fundamentos, implementaciones prácticas, ejemplos avanzados y mejores prácticas para dominar .NET MAUI y llevar tus habilidades de desarrollo móvil al siguiente nivel. 📑 Contenido del Artículo Introducción a .NET MAUI para móviles Fundamentos y Conceptos Clave Arquitectura de .NET MAUI ...

🔥 Microservicios con .NET: Guía Definitiva para Principiantes y Desarrolladores Intermedios

🔥 Microservicios con .NET: Guía Definitiva para Principiantes y Desarrolladores Intermedios ⏱️ Tiempo de lectura: 15 minutos 🎯 Nivel: Intermedio ¡Prepárate para sumergirte en el fascinante mundo de los microservicios con .NET! Esta guía integral te equipará con los conocimientos esenciales y las técnicas prácticas que necesitas para dominar esta arquitectura moderna. Tanto si eres un principiante que busca una base sólida como un desarrollador experimentado que busca ampliar tus habilidades, este artículo te guiará paso a paso a través de los conceptos fundamentales, la implementación y los mejores prácticas de los microservicios. 📑 Contenido del Artículo 🚀 Introducción a los Microservicios con .NET 💡 Fundamentos y Conceptos Clave ¿Qué son los Microservicios? Ventajas de los Microservicios Desafíos de los Microservicios ...

🚀 Domain-Driven Design (DDD): Guía Completa para Desarrolladores

🚀 Domain-Driven Design (DDD): Guía Completa para Desarrolladores ⏱️ Tiempo de lectura: 30 minutos 🎯 Nivel: Intermedio ¡Sumérgete en el mundo de Domain-Driven Design (DDD) y descubre cómo modelar tu dominio de manera efectiva para crear software flexible y mantenible! Este artículo te guiará a través de los fundamentos, la implementación práctica y las mejores prácticas de DDD. 📑 Contenido del Artículo Introducción a Domain-Driven Design (DDD) Fundamentos y Conceptos Clave Conceptos Clave de DDD Principios de DDD Patrones de DDD Implementación Práctica Implementando DDD en Diferentes Lenguajes Herramientas para DDD ...