c#将DataTable转为json
/// <summary>
/// DataTable数据转json数据
/// </summary>
/// <param name="dt">DataTable类型数据</param>
/// <returns>json类型字符串数据</returns>
private string DataTableToJson(DataTable dt)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dt.Rows)
{
Dictionary<string, object> drow = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}
Newtonsoft.Json方式
需要在项目中添加引用Newtonsoft.Json.dll
using Newtonsoft.Josn;
public string DataTableToJson(DataTable dt){
string json = JsonConvert.SerializeObject(dt);
return json;
}
Json字符串转DataTable
注:适用于处理简单json数据,如:[{“a”:“1”,“b”:“2”},{“a”:“3”,“b”:“4”}]
/// <summary>
/// Json字符串转DataTable
/// </summary>
/// <param name="json">json字符串</param>
/// <returns>DataTable类型数据</returns>
public static DataTable JsonToDataTable(string json)
{
DataTable dataTable = new DataTable(); //实例化
//json数据为空
if (string.IsNullOrEmpty(json))
return dataTable;
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
//序列数据为空
if (arrayList.Count < 0)
return dataTable;
foreach (Dictionary<string, object> dictionary in arrayList)
{
//没有key
if (dictionary.Keys.Count<string>() == 0)
{
return dataTable;
}
//添加列,只一次
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中
}
return dataTable;
}