您的位置:首页 > Web前端 > JavaScript

json 互转Datatable

2016-01-05 10:49 701 查看
只是不想每次还要去找别人的,还是自己留底吧

#region DataSet转换成Json格式 DataTable转换成Json格式

/// <summary>

/// DataSet转换成Json格式

/// </summary>

/// <param name="ds">DataSet</param>

/// <returns></returns>

public static string Dataset2Json(DataSet ds)

{

StringBuilder json = new StringBuilder();

foreach (DataTable dt in ds.Tables)

{

json.Append("{\"");

json.Append(dt.TableName);

json.Append("\":");

json.Append(DataTable2Json(dt));

json.Append("}");

} return json.ToString();

}

/// <summary>

/// dataTable转换成Json格式

/// </summary>

/// <param name="dt"></param>

/// <returns></returns>

public static string DataTable2Json(DataTable dt)

{

StringBuilder jsonBuilder = new StringBuilder();

jsonBuilder.Append("{\"");

jsonBuilder.Append(dt.TableName);

jsonBuilder.Append("\":[");

jsonBuilder.Append("[");

for (int i = 0; i < dt.Rows.Count; i++)

{

jsonBuilder.Append("{");

for (int j = 0; j < dt.Columns.Count; j++)

{

jsonBuilder.Append("\"");

jsonBuilder.Append(dt.Columns[j].ColumnName);

jsonBuilder.Append("\":\"");

jsonBuilder.Append(dt.Rows[i][j].ToString());

jsonBuilder.Append("\",");

}

jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

jsonBuilder.Append("},");

}

jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

jsonBuilder.Append("]");

jsonBuilder.Append("}");

return jsonBuilder.ToString();

}

#endregion

#region Json 字符串 转换为 DataTable数据集合

/// <summary>

/// 将json转换为DataTable

/// </summary>

/// <param name="strJson">得到的json</param>

/// <returns></returns>

public static DataTable JsonToDataTable(string strJson)

{

//转换json格式

strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();

//取出表名

var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);

string strName = rg.Match(strJson).Value;

DataTable tb = null;

//去除表名

strJson = strJson.Substring(strJson.IndexOf("[") + 1);

strJson = strJson.Substring(0, strJson.IndexOf("]"));

//获取数据

rg = new Regex(@"(?<={)[^}]+(?=})");

MatchCollection mc = rg.Matches(strJson);

for (int i = 0; i < mc.Count; i++)

{

string strRow = mc[i].Value;

string[] strRows = strRow.Split('*');

//创建表

if (tb == null)

{

tb = new DataTable();

tb.TableName = strName;

foreach (string str in strRows)

{

var dc = new DataColumn();

string[] strCell = str.Split('#');

if (strCell[0].Substring(0, 1) == "\"")

{

int a = strCell[0].Length;

dc.ColumnName = strCell[0].Substring(1, a - 2);

}

else

{

dc.ColumnName = strCell[0];

}

tb.Columns.Add(dc);

}

tb.AcceptChanges();

}

//增加内容

DataRow dr = tb.NewRow();

for (int r = 0; r < strRows.Length; r++)

{

dr[r] = strRows[r].Split('#')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");

}

tb.Rows.Add(dr);

tb.AcceptChanges();

}

return tb;

}

/// <summary>

/// Json 字符串 转换为 DataTable数据集合 这个估计要用javaScriptSerializer才能用这个方法

/// </summary>

/// <param name="json"></param>

/// <returns></returns>

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<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); //循环添加行到DataTable中

}

}

}

catch

{

}

result = dataTable;

return result;

}

#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: