تبدیل DataTable به رشته با استفاده از Json در Asp.net

شنبه 2 اسفند 1393

در این مقاله میخواهیم یک DataTable را به رشته با استفاده از json در Asp.Net تبدیل کنیم

تبدیل DataTable به رشته با استفاده از Json در Asp.net

ابتدا یک پروژه از نوع وب فرم ایجاد کنید سپس داخل پوشه App_Code یک کلاس به نام ConvertTableToJason بسازید و درون کلاس یک تابع به نام  DataTableToJson بنویسید که به عنوان ورودی یک DataTable بگیرد :

using System.Data  
using System.Text;  
public class ConvertDatatableToJson  
{  
   public string DataTableToJson(DataTable dt)  
   {  
      DataSet ds = new DataSet();  
      ds.Merge(dt);  
      StringBuilder JsonStr = new StringBuilder();  
      if (ds != null && ds.Tables[0].Rows.Count > 0)  
      {  
         JsonStr.Append("[");  
         for (int i = 0; i < ds.Tables[0].Rows.Count; i++)  
         {  
            JsonStr.Append("{");  
            for (int j = 0; j < ds.Tables[0].Columns.Count; j++)  
            {  
               if (j < ds.Tables[0].Columns.Count - 1)  
               {  
                  JsonStr.Append("\"" + ds.Tables[0].Columns[j].ColumnName.ToString() + "\":" + "\"" + ds.Tables[0].Rows[i][j].ToString() + "\",");  
               }  
               else if (j == ds.Tables[0].Columns.Count - 1)  
               {  
                  JsonStr.Append("\"" + ds.Tables[0].Columns[j].ColumnName.ToString() + "\":" + "\"" + ds.Tables[0].Rows[i][j].ToString() + "\"");  
               }  
            }  
            if (i == ds.Tables[0].Rows.Count - 1)  
            {  
               JsonStr.Append("}");  
            }  
            else     
            {  
               JsonStr.Append("},");  
            }  
         }  
         JsonStr.Append("]");  
         return JsonStr.ToString();  
      }  
      else  
      {  
         return null;  
      }  
   }  

حالا یک صفحه جدید به پروژه خود اضافه کنید سپس یک گرید ویو به صفحه خود اضافه کرده و ستون های آنرا تنظیم نمایید:

    <asp:GridView ID="ui_grdVw_EmployeeDetail" runat="server" Width="50%" AutoGenerateColumns="false" HeaderStyle-CssClass="pageheading">  
    <Columns>  
    <asp:TemplateField HeaderText="S.NO">  
    <ItemTemplate>  
    <%#Container.DataItemIndex+1 %>  
    </ItemTemplate>  
    </asp:TemplateField>  
    <asp:TemplateField HeaderText="Employee ID">  
    <ItemTemplate>  
    <asp:Label ID="ui_lbl_EmployeeID" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Emp_id") %>'></asp:Label>  
    </ItemTemplate>  
    </asp:TemplateField>  
    <asp:TemplateField HeaderText="Employee Name">  
    <ItemTemplate>  
    <asp:Label ID="ui_lbl_EmployeeName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Emp_Name") %>'></asp:Label>  
    </ItemTemplate>  
    </asp:TemplateField>  
    <asp:TemplateField HeaderText="Employee Post">  
    <ItemTemplate>  
    <asp:Label ID="ui_lbl_EmpJob" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Emp_job") %>'></asp:Label>  
    </ItemTemplate>  
    </asp:TemplateField>  
    <asp:TemplateField HeaderText="Department">  
    <ItemTemplate>  
    <asp:Label ID="ui_lbl_Department" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Emp_Dep") %>'></asp:Label>  
    </ItemTemplate>  
    </asp:TemplateField>  
    </Columns>  
    </asp:GridView>  
    <br />  
    <asp:Button ID="ui_btn_Convert1" runat="server" Text="Manually Convert To Json" OnClick="ui_btn_Convert1_Click" /><br /><br /><br />  
    <asp:Label ID="ui_lbl_JsonString1" runat="server"></asp:Label>  

حالا به صفحه Default.aspx.cs بروید و در بالای صفحه در گلوبال یک متغیر از DataTable و یک متغیر از کلاسی که در بالا  ساختیم و یک متغیر رشته ای در نظر بگیرید:

DataTable dt;  
   ConvertDatatableToJson dtJ;  
   string JsonString = string.Empty;

حال در رویداد PageLoad یک نابع برای بایند اطلاعات به گرید فراتخوانی میکنیم:

 protected void Page_Load(object sender, EventArgs e)  
   {  
      if (!IsPostBack)  
      {  
         ui_grdvw_EmployeeDetail_Bind();  
      }  
   }   

حال بدنه تابع را به شکل زیر بنویسید:

 protected void ui_grdvw_EmployeeDetail_Bind()  
   {  
      dt = new DataTable();  
      EmployeeRecord employeeRecord = new EmployeeRecord();  
      dt = employeeRecord.EmpRecord();  
      ViewState["dt"] = dt;  
      ui_grdVw_EmployeeDetail.DataSource = dt;  
      ui_grdVw_EmployeeDetail.DataBind();  
   }   

و در رویداد کلیک دکمه convert کد زیر را بنویسید:

 protected void ui_btn_Convert1_Click(object sender, EventArgs e)  
   {  
      dtJ = new ConvertDatatableToJson();  
      JsonString = dtJ.DataTableToJson((DataTable)ViewState["dt"]);  
      ui_lbl_JsonString1.Text = JsonString;  
   }   

حالا میتونید برنامه خود را اجرا کنید

روش دیگر استفاده از کتابخانه newtonSoft می باشد

ابتدا فایل dll را به پروژه خود اضافه کرده و به صفحه Default.aspx یک label و یک Button اضافه کنید



<asp:Button ID="iu_btn_Convert2" runat="server" Text="Newtonsoft Convert To Json" OnClick="iu_btn_Convert2_Click" />  
<br />  
<br />  
<asp:Label ID="ui_lbl_JsonString2" runat="server"></asp:Label>

سپس باید در صفحه Default.aspx.cs ابتدا برای شناختن کتابخانه از Using استفاده کنید:

using Newtonsoft.Json;  

و در رویداد کلیک دکمه ای که به صفحه خود اضافه کردید کد زیر را بنویسید:


    protected void iu_btn_Convert2_Click(object sender, EventArgs e)  
    {  
       dt = (DataTable)ViewState["dt"];  
       JsonString = JsonConvert.SerializeObject((DataTable)ViewState["dt"]);  
       ui_lbl_JsonString2.Text = JsonString;  
    }  

حالا میتونید برنامه خود را اجرا کنید:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید