18.8.08

Serializar un DataSet a JSON

Recientemente me encontre con la necesidad en ASP.NET de serializar un DataSet para enviarlo, via AJAX, a un browser, para luego allí procesarlo convenientemente.

Un buen compañero de trabajo, Leonardo Villalva, es el autor de un código en el viejo ASP, para serializar ADO Recordset a formato JSON. Basándome en ese código arme esta clase que permite hacer la misma tarea en .NET, y aquí la publico para compartirla con ustedes.




' ------------------------------------------------------------------
' Clase   : JSONSerializer
' Autor   : Julio González
' Fecha   : 14/07/2008
' ------------------------------------------------------------------
Imports Microsoft.VisualBasic
Imports System.Data


Namespace JG
   Public Class JSONSerializer
      Public Function DataTableSerializer(ByVal dt As DataTable) As String
         Dim JsonString As New StringBuilder()
         Dim tmpR, tmpA As StringBuilder

         'el objeto no existe o no tiene filas
         If dt Is Nothing Or dt.Rows.Count = 0 Then
            Return String.Empty
         End If

         'serializo
         JsonString.Append("{")
         JsonString.Append("filas:[")
         tmpA = New StringBuilder
         For Each f As DataRow In dt.Rows
            tmpA.Append("{")
            tmpR = New StringBuilder
            For Each c As DataColumn In dt.Columns
               tmpR.Append(c.ColumnName & ":""" & f(c.ColumnName).ToString & """,")
            Next
            tmpA.Append((tmpR.ToString.Remove((tmpR.ToString.Length - 1), 1)))
            tmpA.Append("},")
         Next
         JsonString.Append(tmpA.ToString.Remove((tmpA.ToString.Length - 1), 1))
         JsonString.Append("]}")

         Return JsonString.ToString
      End Function
   End Class

End Namespace


Espero que les sea útil.

7 Comentarios:

Anónimo dice...

Perfecto

Anónimo dice...

Buena

Anónimo dice...

tienes otra porfa que haga lo contrario de json a datatable y si no es mucho pedir tambien que se incluyan los tipos da datos del datatble

Anónimo dice...

todo perfecto pero que pasaria si hay mas de 1000 registros lo resultados serian los mismos?

Julio González Seara dice...

Con cualquier método que elijas, llámese html, json, xml, que elijas para enviar info a un navegador, si mandas 1000 filas tendrás problemas.
Para eso está la paginación y el cache de .NET
Generalmente serializas lo necesario para hacer parte del trabajo y, si necesitas más, paginas.

Luisito dice...

cuando recibo el datatable serializado como lo puedo parsear?
esta bien asi?
resultado = $.parseJSON(data.d);
la data es lo que me llega al cliente, espero sus respuestas, gracias

Julio González Seara dice...

Lo conviertes en un objeto Javascript con un simple EVAL.

eval("var DS=" + data.d);