Todo en ASP.NET

Blog dedicado a la programación con Visual Studio .NET….. especialmente desarrollo Web

[ASP.NET] Serializando un consulta LINQ a JSON

Publicado por Julio Avellaneda en 03/24/2012

Hola a todos, actualmente creo que todos hemos escuchado sobre el formato JSON (JavaScript Object Notation) y su excelente trabajo en conjunto con AJAX, y debido a su gran popularidad los desarrolladores de .NET ya tenemos un namespace que nos permiten trabajar con este tipo de formato.

En este post quiero mostrar como podemos tener el resultado de una consulta LINQ y persistirlo a un archivo de texto en formato JSON.

En primer lugar vamos a definir una clase, la cual será la entidad que vamos a convertir a JSON, la clase tendra la información básica de un cliente, y solo vamos a manejar 4 atributos:

 1: Public Class Cliente
 2: 
 3:     Public Property Codigo As Integer
 4:     Public Property Nombre As String
 5:     Public Property Email As String
 6:     Public Property Ciudad As String
 7:  
 8: End Class

Primero que todo vamos a mostrar una lista de Clientes en un control GridView, entonces definidos el HTML para el GridView y adicionalmente creamos un botón que nos exportara los datos a el archivo de texto, la creación de este HTML no la coloco puesto que es realmente muy sencilla, pero la idea es una vez carguemos datos visualizar algo así:

Imagen1

Ahora iniciemos con el código, lo primero que vamos a tener es una función la cual va a retornar una lista de clientes:

 1: Private Function ObtenerClientes() As List(Of Cliente)
 2:     Dim clientes As List(Of Cliente) = New List(Of Cliente) From {
 3:         New Cliente With {.Codigo = 1, .Nombre = "Empleado 1", .Email = "empleado1@hotmail.com", .Ciudad = "Bogota"},
 4:         New Cliente With {.Codigo = 2, .Nombre = "Empleado 2", .Email = "empleado2@hotmail.com", .Ciudad = "Bogota"},
 5:         New Cliente With {.Codigo = 3, .Nombre = "Empleado 3", .Email = "empleado3@hotmail.com", .Ciudad = "Bogota"},
 6:         New Cliente With {.Codigo = 4, .Nombre = "Empleado 4", .Email = "empleado4@hotmail.com", .Ciudad = "Cali"},
 7:         New Cliente With {.Codigo = 5, .Nombre = "Empleado 5", .Email = "empleado5@hotmail.com", .Ciudad = "Cali"},
 8:         New Cliente With {.Codigo = 6, .Nombre = "Empleado 6", .Email = "empleado6@hotmail.com", .Ciudad = "Medellin"},
 9:         New Cliente With {.Codigo = 7, .Nombre = "Empleado 7", .Email = "empleado7@hotmail.com", .Ciudad = "Medellin"},
 10:         New Cliente With {.Codigo = 8, .Nombre = "Empleado 8", .Email = "empleado8@hotmail.com", .Ciudad = "Medellin"}
 11:     }
 12:     Return clientes
 13: End Function

Luego para cargar el GridView solo el asignamos como fuente de datos la lista que retorna la función creada anteriormente:

 1: Private Sub CargarClientes()
 2:     grvClientes.DataSource = ObtenerClientes()
 3:     grvClientes.DataBind()
 4: End Sub

Ahora viene lo interesante, vamos a persistir la lista de clientes a un archivo de texto, en este caso vamos a agregar una referencia la namespace System.Runtime.Serialization, e importamos System.IO y System.Runtime.Serialization.Json:

 1: Imports System.Runtime.Serialization.Json
 2: Imports System.IO

Luego en el evento click del botón tenemos:

 1: Protected Sub btnJson_Click(sender As Object, e As EventArgs) Handles btnJson.Click
 2:     Dim clientes As List(Of Cliente) = ObtenerClientes()
 3:  
 4:     Dim query As IEnumerable(Of Cliente) = (From c In clientes
 5:                                             Select c).ToList()
 6: 
 7:     Dim serializer As DataContractJsonSerializer = New DataContractJsonSerializer(GetType(IEnumerable(Of Cliente)))
 8:     Dim file As FileStream = New FileStream("c:/clientes.json", FileMode.Create)
 9:  
 10:     serializer.WriteObject(file, query)
 11:     file.Close()
 12:     file.Dispose()
 13: End Sub

Primero definimos una lista de clientes, luego realizamos una consulta a esa lista de clientes utilizando LINQ, para este ejemplo se van a seleccionar todos los datos, por lo tanto no se ha utilizando ninguna condición de filtro, luego creamos un objeto de tipo DataContractJsonSerializer para poder serializar los datos, en su constructor le definimos el tipo mediante GetType, acá lo importante es que el tipo que definimos es el mismo tipo de dato que retorna la consulta LINQ; luego creamos un objeto FileStream para poder crear el archivo y finalmente utilizando el método WriteObject escribimos los datos en el archivo, como argumento le estamos pasando el objeto FileStream creado y la variable que contiene los datos.

Ahora si revisamos el archivo creado vamos a tener algo como:

 1: [{"Ciudad":"Bogota","Codigo":1,"Email":"empleado1@hotmail.com","Nombre":"Empleado 1"},
 2: {"Ciudad":"Bogota","Codigo":2,"Email":"empleado2@hotmail.com","Nombre":"Empleado 2"},
 3: {"Ciudad":"Bogota","Codigo":3,"Email":"empleado3@hotmail.com","Nombre":"Empleado 3"},
 4: {"Ciudad":"Cali","Codigo":4,"Email":"empleado4@hotmail.com","Nombre":"Empleado 4"},
 5: {"Ciudad":"Cali","Codigo":5,"Email":"empleado5@hotmail.com","Nombre":"Empleado 5"},
 6: {"Ciudad":"Medellin","Codigo":6,"Email":"empleado6@hotmail.com","Nombre":"Empleado 6"},
 7: {"Ciudad":"Medellin","Codigo":7,"Email":"empleado7@hotmail.com","Nombre":"Empleado 7"},
 8: {"Ciudad":"Medellin","Codigo":8,"Email":"empleado8@hotmail.com","Nombre":"Empleado 8"}]

 

Espero les haya gustado, como siempre les dejo el código del ejemplo, en el archivo esta en ejemplo en Visual Basic y en C#.

Descarga el ejemplo!

About these ads

5 comentarios hacia “[ASP.NET] Serializando un consulta LINQ a JSON”

  1. Pablo Alejandro Perez Acosta escribió

    Hola Julio. Gracias por compartir el articulo. Para ver el resultado de este esfuerzo use esta direcciòn en Chrome para visualizar el archivo.

    http://jsonviewer.stack.hu/

    Yo nunca he usado Json pero tengo entendido que es un formato de intercambio de datos através de web mas ligero que xml.

  2. [...] Making Sense of HTML5 with SharePoint: What Is HTML5?, Integrating ExtJS and ASP.NET MVC e Serializando un consulta LINQ a JSON. O primeiro aborda o HTML5 junto ao Sharepoint, o segundo mostra em um exemplo bem simples como [...]

  3. [...] [ASP.NET] Serializando un consulta LINQ a JSON [...]

  4. [...] [ASP.NET] Serializando un consulta LINQ a JSON [...]

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Conectando a %s

 
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.645 seguidores

%d bloggers like this: