2021-01-28 更新 添加Newtonsoft.Json 实现Json转DataTable和 DataTable转Json
Json格式
[{"id":"329","txt":"luofenming.com"},{"id":"338","txt":"lqwvje"},{"id":"888","txt":"78630559"}]
//这里是用Newtonsoft.Json实现Json与DataTable互转
public void TestMethod()
{
string json = "[{\"id\":\"329\",\"txt\":\"luofenming.com\"}, {\"id\":\"338\",\"txt\":\"lqwvje\"},{\"id\":\"888\",\"txt\":\"78630559\"}]";
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
string s = JsonConvert.SerializeObject(dt);
}
下面实现方法不建议去使用
System.Web.Extensions 引用这个程序集
/// <summary>
/// Json转DataTable
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public DataTable Json2DataTable(string json)
{
DataTable dataTable = new DataTable();
DataTable result = null;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue;
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
if (arrayList.Count > 0)
{
foreach (Dictionary<string, object> dictionary in arrayList)
{
if (dictionary.Keys.Count<string>() == 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); //这里datarow都有值,但是datatable没加上
}
}
}
catch { };
result = dataTable;
return result;
}
/// <summary>
/// DataTable转Json
/// </summary>
/// <param name="dtb"></param>
/// <returns></returns>
private string DataTable2Json(DataTable dtb)
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue;
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary<string, object> drow = new Dictionary<string, object>();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return javaScriptSerializer.Serialize(dic);
}
以下是调用互转方法
private void button1_Click(object sender, EventArgs e)
{
string json = "[{\"id\":\"329\",\"txt\":\"luofenming.com\"}, {\"id\":\"338\",\"txt\":\"lqwvje\"},{\"id\":\"888\",\"txt\":\"78630559\"}]";
DataTable dt = Json2DataTable(json);//Json转DataTable
string ss = DataTable2Json(dt);//dataTable转Json
}