DataTableとJsonの相互変換、およびDataTableのJson変換の3つの方式
DataTableをJson文字列に変換
注意:次のコードは一般的なハンドラHandlerに書かれています.ashxファイルの中
方法1:JavaScriptSerializerの使用
まずシステムを追加します.Web.Script.Serializationネーミングスペース:
JavaScriptSerializerというクラスは、非同期通信層の内部で使用されてデータをシーケンス化および逆シーケンス化します.オブジェクトをシーケンス化する場合は、シーケンス化メソッドを使用します.Json文字列を逆シーケンス化し、DeserializeまたはDeserializeObjectメソッドを使用します.ここでは,シーケンス化法を用いてJson形式のデータを得た.コード:
方法2:Jsonを用いる.Net DLL (Newtonsoft)
このメソッドにJsonを追加します.Net DLLは、NewtonsoftからJsonをダウンロードすることができます.Net DLL、ネーミングスペースをインポートします.コードは次のとおりです.
方法3:StringBuilderを使用Jsonサンプルデータ:{"名前":"張三","年齢":"30"}です.Jsonには、複数の名前/値ペアを含むカッコでオブジェクトを保存します.
StringBuilderを使用すると、似たようなJson文字列を作成できます.
StringBuilderクラスを使用するには、まずSystemをインポートする必要があります.Textネーミングスペース:
StringBuilderオブジェクトJsonStringに追加し、このオブジェクトに戻ります.
Json文字列をDataTableデータセットに変換
備考情報:コードは最近プロジェクトで使用したコードの部分切り取りです.
注意:次のコードは一般的なハンドラ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;
}
備考情報:コードは最近プロジェクトで使用したコードの部分切り取りです.