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