Table of Contents
4 ways to Convert JSON to DataTable in C# – asp.net
Problem: Sometime we do require to convert JSON to DataTable in C# Windows Application or Web application or website to display data using DataTable in GridView or DataGrid or other Server Control. I strongly recommend to read my other post as a reference before reading this post are Convert DataTable to JSON in C#, Convert DataTable to List C#, Extension Method in C#, Extension Method with parameter in C#, Convert List to XML in C# etc.
Solutions:
Here as a solution I will discuss three different ways from which we could Convert JSON to DataTable in C#.
1. Using Simple method
In this method we just split the string by using specific characters and tried to fetch data from JSON string. I have added full code snippet for your reference. Please refer and try to understand.
using System; using System.Data; using System.Text.RegularExpressions; using System.Collections.Generic; namespace Convert_JSON_to_DataTable_Csharp_TechnoThirsty { class Program { static void Main(string[] args) { string strJSON = @"[ { EmployeeID: ""1"", EmployeeName: ""Dhruv"" }, { EmployeeID: ""2"", EmployeeName: ""Bhavin"" }, { EmployeeID: ""4"", EmployeeName: ""Arvind"" }, { EmployeeID: ""5"", EmployeeName: ""Aditya"" }, { EmployeeID: ""6"", EmployeeName: ""Vidhi"" }, { EmployeeID: ""7"", EmployeeName: ""Neha"" } ]"; DataTable dtUsingMethod = GetJSONToDataTableUsingMethod(strJSON); } public static DataTable GetJSONToDataTableUsingMethod(string JSONData) { DataTable dtUsingMethodReturn = new DataTable(); string[] jsonStringArray = Regex.Split(JSONData.Replace("[", "").Replace("]", ""), "},{"); List<string> ColumnsName = new List<string>(); foreach (string strJSONarr in jsonStringArray) { string[] jsonStringData = Regex.Split(strJSONarr.Replace("{", "").Replace("}", ""), ","); foreach (string ColumnsNameData in jsonStringData) { try { int idx = ColumnsNameData.IndexOf(":"); string ColumnsNameString = ColumnsNameData.Substring(0, idx).Replace("\"", "").Trim(); if (!ColumnsName.Contains(ColumnsNameString)) { ColumnsName.Add(ColumnsNameString); } } catch (Exception ex) { throw new Exception(string.Format("Error Parsing Column Name : {0}", ColumnsNameData)); } } break; } foreach (string AddColumnName in ColumnsName) { dtUsingMethodReturn.Columns.Add(AddColumnName); } foreach (string strJSONarr in jsonStringArray) { string[] RowData = Regex.Split(strJSONarr.Replace("{", "").Replace("}", ""), ","); DataRow nr = dtUsingMethodReturn.NewRow(); foreach (string rowData in RowData) { try { int idx = rowData.IndexOf(":"); string RowColumns = rowData.Substring(0, idx).Replace("\"", "").Trim(); string RowDataString = rowData.Substring(idx + 1).Replace("\"", "").Trim(); nr[RowColumns] = RowDataString; } catch (Exception ex) { continue; } } dtUsingMethodReturn.Rows.Add(nr); } return dtUsingMethodReturn; } } }
2. Using NewtonSoft.dll
In this method first of all we have to add Newtonsoft.dll. For this we have to add NeGet Package as shown below image:

After adding NeGet Package we have to add “using Newtonsoft.Json” and find below code for your reference.
using System; using System.Data; using System.Text.RegularExpressions; using System.Collections.Generic; using Newtonsoft.Json; namespace Convert_JSON_to_DataTable_Csharp_TechnoThirsty { class Program { static void Main(string[] args) { string strJSON = @"[ { EmployeeID: ""1"", EmployeeName: ""Dhruv"" }, { EmployeeID: ""2"", EmployeeName: ""Bhavin"" }, { EmployeeID: ""4"", EmployeeName: ""Arvind"" }, { EmployeeID: ""5"", EmployeeName: ""Aditya"" }, { EmployeeID: ""6"", EmployeeName: ""Vidhi"" }, { EmployeeID: ""7"", EmployeeName: ""Neha"" } ]"; DataTable dtUsingMethod = GetJSONToDataTableUsingNewtonSoftDll(strJSON); } public static DataTable GetJSONToDataTableUsingNewtonSoftDll(string JSONData) { DataTable dt = (DataTable)JsonConvert.DeserializeObject(JSONData, (typeof(DataTable))); return dt; } } }
3. Using NewtonSoft.dll by Linq
As shown in method-2 I have demonstrate how we could add NewtonSoft.dll. In this method we have used NewtonSoft’s “using Newtonsoft.Json.Linq;” and we tried to convert Json into DataTable. Please find below code snippet for your reference.
using System; using System.Data; using System.Linq; using System.Text.RegularExpressions; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Convert_JSON_to_DataTable_Csharp_TechnoThirsty { class Program { static void test(string[] args) { string strJSON = @"{Employees:[ { EmployeeID: ""1"", EmployeeName: ""Dhruv"" }, { EmployeeID: ""2"", EmployeeName: ""Bhavin"" }, { EmployeeID: ""4"", EmployeeName: ""Arvind"" }, { EmployeeID: ""5"", EmployeeName: ""Aditya"" }, { EmployeeID: ""6"", EmployeeName: ""Vidhi"" }, { EmployeeID: ""7"", EmployeeName: ""Neha"" } ]}"; DataTable dtNewtonSoftLinq = ConvertJsonToDatatableLinq(strJSON); } public static DataTable ConvertJsonToDatatableLinq(string jsonString) { var jsonLinq = JObject.Parse(jsonString); // Find the first array using Linq var linqArray = jsonLinq.Descendants().Where(x => x is JArray).First(); var jsonArray = new JArray(); foreach (JObject row in linqArray.Children<JObject>()) { var createRow = new JObject(); foreach (JProperty column in row.Properties()) { // Only include JValue types if (column.Value is JValue) createRow.Add(column.Name, column.Value); } jsonArray.Add(createRow); } return JsonConvert.DeserializeObject<DataTable>(jsonArray.ToString()); } } }
4. Using Extension Method and Class
Finally in method-4 I have used Extension method and class to convert JSON string into DataTable. As you can see in below code snippet I have created Extension method named with “ToDataTable” and declared class named with “Employee”.
using System; using System.Data; using System.Linq; using System.Text.RegularExpressions; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.ComponentModel; namespace Convert_JSON_to_DataTable_Csharp_TechnoThirsty { class Program { static void test(string[] args) { string strJSON = @"[ { EmployeeID: ""1"", EmployeeName: ""Dhruv"" }, { EmployeeID: ""2"", EmployeeName: ""Bhavin"" }, { EmployeeID: ""4"", EmployeeName: ""Arvind"" }, { EmployeeID: ""5"", EmployeeName: ""Aditya"" }, { EmployeeID: ""6"", EmployeeName: ""Vidhi"" }, { EmployeeID: ""7"", EmployeeName: ""Neha"" } ]"; List<Employee> Employees = JsonConvert.DeserializeObject<List<Employee>>(strJSON); DataTable dt = Employees.ToDataTable<Employee>(); } public static DataTable ConvertJsonToDatatableLinq(string jsonString) { var jsonLinq = JObject.Parse(jsonString); // Find the first array using Linq var linqArray = jsonLinq.Descendants().Where(x => x is JArray).First(); var jsonArray = new JArray(); foreach (JObject row in linqArray.Children<JObject>()) { var createRow = new JObject(); foreach (JProperty column in row.Properties()) { // Only include JValue types if (column.Value is JValue) createRow.Add(column.Name, column.Value); } jsonArray.Add(createRow); } return JsonConvert.DeserializeObject<DataTable>(jsonArray.ToString()); } } class Employee { public int EmployeeID { get; set; } public string EmployeeName { get; set; } } public static class MyExtensionClass { public static DataTable ToDataTable<T>(this List<T> data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, prop.PropertyType); } object[] values = new object[props.Count]; foreach (T item in data) { for (int i = 0; i < values.Length; i++) { values[i] = props[i].GetValue(item); } table.Rows.Add(values); } return table; } } }
As an output of all programs we will get below image output as a DataTable:

Folks, I request you to test methods in your environment and use in live environment in terms of performance as well. I would be happy to hear from you guys. Let me know topics on which you want to know. Happy Coding!!!