vb.net datatable Serialize to json vb.net datatable Serialize to json json json

vb.net datatable Serialize to json


The 'Oh-no you didn't' version:

Public Function GetJson(ByVal dt As DataTable) As String    Return New JavaScriptSerializer().Serialize(From dr As DataRow In dt.Rows Select dt.Columns.Cast(Of DataColumn)().ToDictionary(Function(col) col.ColumnName, Function(col) dr(col)))End Function


Here is my solution:

Public Function GetJson() As String    Dim dt As New System.Data.DataTable    dt = CreateDataTable() 'here I retrive data from oracle DB    Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()    Dim packet As New List(Of Dictionary(Of String, Object))()    Dim row As Dictionary(Of String, Object) = Nothing    Try        Dim result() As DataRow = dt.Select("Parent_ = 'main'")        Dim i As Integer        For i = 0 To result.GetUpperBound(0)            row = New Dictionary(Of String, Object)()            If UCase(result(i)(2)) <> "HAS CHILD" Then                row.Add(result(i)(0), result(i)(2))            Else                row.Add(result(i)(0), add_(dt, result(i)(0)))            End If            packet.Add(row)        Next i        Return serializer.Serialize(packet)    Catch ex As Exception        MsgBox(ex.ToString)        Me.Close()    End TryEnd FunctionPublic Function add_(ByVal dt As System.Data.DataTable, ByVal parent_ As String) As Dictionary(Of String, Object)    Dim row As Dictionary(Of String, Object) = Nothing    Try        Dim result() As DataRow = dt.Select("Parent_ = '" & parent_ & "'")        Dim i As Integer        row = New Dictionary(Of String, Object)()        For i = 0 To result.GetUpperBound(0)            If UCase(result(i)(2)) <> "HAS CHILD" Then                row.Add(result(i)(0), result(i)(2))            Else                row.Add(result(i)(0), add_(dt, result(i)(0)))            End If        Next i    Catch ex As Exception        MsgBox(ex.ToString)    End Try    Return rowEnd Function