DataTable与Json相互转化
2011-01-22 09:01
232 查看
很久没写博客了~~今天看见论坛里面有朋友在问table动态增加行的问题,刚好之前有写个几个方法,其中Json这个最简单,所以想写出来,但DataTable跟Json转换的这个类是个基础类,所以我单独拿出来,分享给大家,呵呵!有什么不对的地方,欢迎指正!上代码吧:
好了,写完了,转换只限两种格式相互转换,不能转换其它不规则代码啊~~呵呵,不好意思
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data; using System.Text.RegularExpressions; using System.Collections; using System.Text; namespace Public { /// <summary> /// JsonAndDateTable 的摘要说明 /// </summary> public static class JsonAndDateTable { /// <summary> /// 根据Json返回DateTable,JSON数据格式如: /// {table:[{column1:1,column2:2,column3:3},{column1:1,column2:2,column3:3}]} /// </summary> /// <param name="strJson">Json字符串</param> /// <returns></returns> public static DataTable JsonToDataTable(string strJson) { //取出表名 Regex 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) { DataColumn dc = new DataColumn(); string[] strCell = str.Split(':'); dc.ColumnName = strCell[0].ToString(); 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> /// 根据DataTable返回JSON数据格式如: /// {table:[{column1:1,column2:2,column3:3},{column1:1,column2:2,column3:3}]} /// </summary> /// <param name="tb">需要转换的表</param> /// <returns></returns> public static string DateTableToJson(DataTable tb) { if (tb == null || tb.Rows.Count == 0) { return ""; } string strName = "table"; /* string strName = tb.TableName; if (strName.Trim().Length == 0) { strName = "table"; }*/ StringBuilder sbJson = new StringBuilder(); sbJson.Append("{"); sbJson.Append("/"" + strName + "/":["); Hashtable htColumns = new Hashtable(); for (int i = 0; i < tb.Columns.Count; i++) { htColumns.Add(i, tb.Columns[i].ColumnName.Trim()); } for (int j = 0; j < tb.Rows.Count; j++) { if (j != 0) { sbJson.Append(","); } sbJson.Append("{"); for (int c = 0; c < tb.Columns.Count; c++) { sbJson.Append(htColumns[c].ToString() + ":/"" + tb.Rows[j][c].ToString().Replace(",", ",").Replace(":", ":").Replace("/r/n", " ") + "/","); } sbJson.Append("index:" + j.ToString()); //序号 sbJson.Append("}"); } sbJson.Append("]}"); return sbJson.ToString(); } } }
好了,写完了,转换只限两种格式相互转换,不能转换其它不规则代码啊~~呵呵,不好意思
相关文章推荐
- JSON与DataTable(DataSet)相互转化
- JSON与DataTable(DataSet)相互转化
- DataSet、DataTable、Json、List 等各种数据的相互转化
- JSON与DataTable(DataSet)相互转化
- JSON与DataTable(DataSet)相互转化
- .net json 和 Datatable 相互转化
- DataTable ,XML和JSON相互转化
- [置顶] DataTable与Json相互转化,以及DataTable转化Json的三种方式
- DateTable与List<T>相互转换 及JSON与DataTable(DataSet)相互转化
- 将Datatable转化成json发送前台实现思路
- json数据与字符串的相互转化
- js中json字符串和json对象相互转化
- dataTable和json相互转换
- 使用GSON将对象和json字符串相互转化
- 将DataTable转化为json对象
- json数据与字符串相互转化的例子
- 利用jackson进行Java和json的相互转化
- C# List与DataTable的相互转化
- c# Json List<T> DataTable 数据相互转换
- js中JSON对象和字符串对象相互转化