DataTable to Json using jquery DataTable to Json using jquery json json

DataTable to Json using jquery


In the end, I've decided to use the JavaScriptSerializer class to convert the DataTable into a JSON string. Unfortunately, this class doesn't work with a DataTable so I converted the DataTable into a list of dictionnaries and pass that list to the JavaScriptSerializer class. It takes only a few lines of code and it works fine.
Example in VB.net:

    Public Function GetJson(ByVal dt As DataTable) As String        Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()        Dim rows As New List(Of Dictionary(Of String, Object))        Dim row As Dictionary(Of String, Object)        For Each dr As DataRow In dt.Rows            row = New Dictionary(Of String, Object)            For Each col As DataColumn In dt.Columns                row.Add(col.ColumnName, dr(col))            Next            rows.Add(row)        Next        Return serializer.Serialize(rows)    End Function


Easiest way is to use the LINQ to DataSet extensions. First need to create a generic list (SearchSerialResults is just a DTO in this case) from the DataTable using LINQ to DataSet.

var resultItems = (from DataRow dr in _returnedData.AsEnumerable() select new SearchSerialResults {  ContractLineItem = (int) dr["fldContractLineItemID"],    SearchItem = (string) dr["Search Item"],    Customer = (string) dr["Customer"],    DeviceFound = (string) dr["Device Found"],    Country = (string) dr["Country"],    City = (string) dr["City"],    ContractNumber = (string) dr["Contract Number"],    QuoteNumber = (string) dr["Quote Number"],    BeginDate = (string) dr["Begin Date"],    EndDate = (string) dr["End Date"]}).ToList();

_returnedData is the DataTable in this case. Step 2 is to do the conversion. In this case, I am returning a Json object for a jqGrid.

var jsonObject = new {  total = totalPages,    pageSize,    records = totalRecords,    rows = (from SearchSerialResults item in resultItems select new {      id = item.ContractLineItem,        cell = new [] {          item.ContractLineItem.ToString(),            item.SearchItem,            item.DeviceFound,            item.Customer,            item.ContractNumber,            item.QuoteNumber,            item.Country,            item.City,            item.BeginDate,            item.EndDate,            ""        }    }).ToArray()};return Json(jsonObject) // for MVC