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

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();
        }
    }

}




好了,写完了,转换只限两种格式相互转换,不能转换其它不规则代码啊~~呵呵,不好意思
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: