DataTableとJsonの相互変換、およびDataTableのJson変換の3つの方式

6135 ワード

DataTableをJson文字列に変換
注意:次のコードは一般的なハンドラHandlerに書かれています.ashxファイルの中
   
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        context.Response.Charset = "utf-8";
        HttpRequest req = context.Request;
        string method = context.Request.Params["method"].ToString();

        //DataTable    Json   
        if (method == "txtdate")
        {
            string json = "";
            string sql = "SELECT [user_id],[user_name] FROM [QIMS].[dbo].[user_mstr]";
            DataTable dt = DBHelper.GetDataTableSql(sql);
            //              
            // if (dt.Rows.Count > 0)
            //{
              //  json =ToJson(dt);
            //}
            //   
             if (dt.Rows.Count> 0)
            {
                json =DataTableToJsonWithJsonNet(dt);
            } //            
        // if (dt.Rows.Count > 0)
        // {
           //     json =DataTableToJson(dt);
        // }
  context.Response.Write(json);
  return;
    }     
}    

方法1:JavaScriptSerializerの使用
まずシステムを追加します.Web.Script.Serializationネーミングスペース:
   using System.Web.Script.Serialization;  

JavaScriptSerializerというクラスは、非同期通信層の内部で使用されてデータをシーケンス化および逆シーケンス化します.オブジェクトをシーケンス化する場合は、シーケンス化メソッドを使用します.Json文字列を逆シーケンス化し、DeserializeまたはDeserializeObjectメソッドを使用します.ここでは,シーケンス化法を用いてJson形式のデータを得た.コード:
   public static string ToJson(this DataTable dt)
    {
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
        javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //      
        ArrayList arrayList = new ArrayList();
        foreach (DataRow dataRow in dt.Rows)
        {
            Dictionary dictionary = new Dictionary();  //         
            foreach (DataColumn dataColumn in dt.Columns)
            {
                dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr());
            }
            arrayList.Add(dictionary); //ArrayList       
        }
 
        return javaScriptSerializer.Serialize(arrayList);  //    json   
    }

方法2:Jsonを用いる.Net DLL (Newtonsoft)
このメソッドにJsonを追加します.Net DLLは、NewtonsoftからJsonをダウンロードすることができます.Net DLL、ネーミングスペースをインポートします.コードは次のとおりです.
using Newtonsoft.Json;  
   
public string DataTableToJsonWithJsonNet(DataTable dt)  
   {   
    string JsonString=string.Empty;   
    JsonString = JsonConvert.SerializeObject(dt);   
    return JsonString;   
  }

方法3:StringBuilderを使用Jsonサンプルデータ:{"名前":"張三","年齢":"30"}です.Jsonには、複数の名前/値ペアを含むカッコでオブジェクトを保存します.
StringBuilderを使用すると、似たようなJson文字列を作成できます.
StringBuilderクラスを使用するには、まずSystemをインポートする必要があります.Textネーミングスペース:
using System.Text; 
の下のコードはJson文字列を生成し、DataTableの行と列を巡り、データを取得します.
StringBuilderオブジェクトJsonStringに追加し、このオブジェクトに戻ります.
public string DataTableToJson(DataTable table)  
    {  
        var JsonString = new StringBuilder();  
        if (table.Rows.Count > 0)  
        {  
            JsonString.Append("[");  
            for (int i = 0; i < table.Rows.Count; i++)  
            {  
                JsonString.Append("{");  
                for (int j = 0; j < table.Columns.Count; j++)  
                {  
                    if (j < table.Columns.Count - 1)  
                    {  
                         JsonString.Append("\"" + table.Columns[j].ColumnName.ToString()
                    + "\":" + "\"" + table.Rows[i][j].ToString() + "\",");  
                    }  
                    else if (j == table.Columns.Count - 1)  
                    {  
                        JsonString.Append("\"" + table.Columns[j].ColumnName.ToString()
                     + "\":" + "\"" + table.Rows[i][j].ToString() + "\"");  
                    }  
                }  
                if (i == table.Rows.Count - 1)  
                {  
                    JsonString.Append("}");  
                }  
                else  
                {  
                    JsonString.Append("},");  
                }  
            }  
            JsonString.Append("]");  
        }  
        return JsonString.ToString();    
    }  

Json文字列をDataTableデータセットに変換
    public static DataTable ToDataTable(this string json)
    {
        DataTable dataTable = new DataTable();  //   
        DataTable result;
        try
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //      
            ArrayList arrayList = javaScriptSerializer.Deserialize(json);
            if (arrayList.Count > 0)
            {
                foreach (Dictionary dictionary in arrayList)
                {
                    if (dictionary.Keys.Count() == 0)
                    {
                        result = dataTable;
                        return result;
                    }
                    if (dataTable.Columns.Count == 0)
                    {
                        foreach (string current in dictionary.Keys)
                        {
                            dataTable.Columns.Add(current, dictionary[current].GetType());
                        }
                    }
                    DataRow dataRow = dataTable.NewRow();
                    foreach (string current in dictionary.Keys)
                    {
                        dataRow[current] = dictionary[current];
                    }
 
                    dataTable.Rows.Add(dataRow); //      DataTable 
                }
            }
        }
        catch
        {
        }
        result = dataTable;
        return result;
    }

備考情報:コードは最近プロジェクトで使用したコードの部分切り取りです.