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 String5: Public Property Email As String 6: Public Property Ciudad As String7: 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í:
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 clientes13: 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 clientes5: 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#.







