Convert DataSet to JSON - C# extension method example

This example shows you how to write C# extension method and how to convert DataSet to JSON using JavaScriptSerializer.

By default DataSet doesnot have GetJSON method to get JOSN string from DataSet. So in this example I have written an extension method to add GetJSON method to DataSet and it will return JSON String as output.

public static class DataSetExt { public static string GetJSON(this DataSet ds) { System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); ArrayList root = new ArrayList(); List<Dictionary<string, object>> table; Dictionary<string, object> data; foreach (DataTable dt in ds.Tables) { table = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows) { data = new Dictionary<string, object>(); foreach (DataColumn col in dt.Columns) { data.Add(col.ColumnName, dr[col]); } table.Add(data); } root.Add(table); } return serializer.Serialize(root); } }

Steps to write GetJSON extension method.

  • Class should be declared as static
  • Method name should be declared as static
  • Method parameter should be starts with "this" keyword and the Object(DataSet) and variable name(ds).
  • Using System.Web.Script.Serialization.JavaScriptSerializer we converted the DataSet to JSON using Dictionary and ArrayList.

Example
C# extension method

CS Code

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.Practices.EnterpriseLibrary.Data; using System.Data; using System.Text; using System.Collections; namespace WebApp { public partial class Sample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnGetJSON_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt = new DataTable(); dt.Columns.Add("Employee Name", typeof(string)); dt.Columns.Add("Salary", typeof(decimal)); dt.Columns.Add("Department", typeof(string)); dt.Rows.Add("John", 5000.00, "Marketing"); dt.Rows.Add("Smith", 4000.00, "IT"); dt.Rows.Add("Williams", 6000.00, "Sales"); dt.Rows.Add("Vijay", 6500.00, "IT"); ds.Tables.Add(dt); dt = new DataTable(); dt.Columns.Add("StudentID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Marks", typeof(int)); dt.Columns.Add("Grade", typeof(string)); dt.Rows.Add(1, "Suresh", 950, "A+"); dt.Rows.Add(1, "Rama", 900, "A+"); dt.Rows.Add(1, "Kishore", 750, "B"); ds.Tables.Add(dt); divOutput.InnerHtml = ds.GetJSON(); } } public static class DataSetExt { public static string GetJSON(this DataSet ds) { System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); ArrayList root = new ArrayList(); List<Dictionary<string, object>> table; Dictionary<string, object> data; foreach (DataTable dt in ds.Tables) { table = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows) { data = new Dictionary<string, object>(); foreach (DataColumn col in dt.Columns) { data.Add(col.ColumnName, dr[col]); } table.Add(data); } root.Add(table); } return serializer.Serialize(root); } } }

ASPX Page

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sample.aspx.cs" Inherits="WebApp.Sample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:Button ID="btnGetJSON" runat="server" Text="Get JSON" OnClick="btnGetJSON_Click" /> <br /><br /> <div id="divOutput" runat="server"> </div> </form> </body> </html>