datatable 和 json 互相转化

来源:互联网 发布:vue.js属于技术架构么 编辑:程序博客网 时间:2024/05/20 18:44

我在最近的开发中经常要用到吧Json转化成DataTable,上网查了一些资料,在加上自己的一些修改

感谢那些无偿分享的同学,希望能把这种精神发扬下去

下面贴出我写的代码


1.把datatable转化成json,并且可以在后面追加一些其他json

    #region 1.DataTable转成Json 返回数据表对应的JSON  {jsonName:[......]}    /// <summary>    /// DataTable转成Json 返回数据表对应的JSON  {jsonName:[......]}    /// 例子:  CommonFunction.DataTableToJson("GPSHistoryList", dt, "\"relust\":\"true\",\"msg\":\"获取车辆信息成功\"");    /// </summary>    /// <param name="jsonName">json名称</param>    /// <param name="dt">数据表</param>    /// <param name="otherJson">除了table外的其他json,例: "\"relust\":\"true\",\"msg\":\"获取车辆信息成功\""</param>    /// <returns>数据表对应的JSON  {jsonName:[......]}</returns>    public static string DataTableToJson(string jsonName, DataTable dt,string otherJson="")    {        StringBuilder Json = new StringBuilder();        Json.Append("{\"" + jsonName + "\":[");        if (dt.Rows.Count > 0)        {            for (int i = 0; i < dt.Rows.Count; i++)            {                Json.Append("{");                for (int j = 0; j < dt.Columns.Count; j++)                {                    Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");                    if (j < dt.Columns.Count - 1)                    {                        Json.Append(",");                    }                }                Json.Append("}");                if (i < dt.Rows.Count - 1)                {                    Json.Append(",");                }            }        }        if (otherJson != "")        {            Json.Append("]," + otherJson + "}");        }        else        {            Json.Append("]}");        }        return Json.ToString();    }    #endregion


2,多个datatable转化成json,有时候可能不止一个datatable要转化成json,所以我修改了一下1,改成可以转化多个datatable

    #region 2.多个DataTable转成Json 返回数据表对应的JSON  {jsonName:[......]}    /// <summary>    /// DataTable转成Json 返回数据表对应的JSON  {jsonName:[......]}    /// 例子:  CommonFunction.DataTableToJson("GPSHistoryList", dt, "\"relust\":\"true\",\"msg\":\"获取车辆信息成功\"");    /// </summary>    /// <param name="jsonName">json名称</param>    /// <param name="dt">数据表</param>    /// <returns>数据表对应的JSON  {jsonName:[......]}</returns>    public static string DataTableListToJson(string[] jsonName, DataTable[] dts, string otherJson = "")    {        StringBuilder Json = new StringBuilder();        Json.Append("{");        for (int jt = 0; jt < dts.Length; jt++)        {            var dt = dts[jt];            Json.Append("\""+jsonName[jt] + "\":[");            if (dt.Rows.Count > 0)            {                for (int i = 0; i < dt.Rows.Count; i++)                {                    Json.Append("{");                    for (int j = 0; j < dt.Columns.Count; j++)                    {                        Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");                        if (j < dt.Columns.Count - 1)                        {                            Json.Append(",");                        }                    }                    Json.Append("}");                    if (i < dt.Rows.Count - 1)                    {                        Json.Append(",");                    }                }            }            if (jt < dts.Length - 1)            {                Json.Append("],");            }        }        if (otherJson != "")        {            Json.Append("]," + otherJson + "}");        }        else        {            Json.Append("]}");        }               return Json.ToString();    }    #endregion

datatable转化成json基本上有上面两个应该够用了

接下来就需要把json转化成datatable,如果要测试,可以通过1方法把table转化成json,在调用这个方法,转化后的datable表名是1方法中的jsonName

注意,这个方法只能转1方法转化后的那种格式的json

    #region 3.根据Json返回DateTable    /// <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)    {        //取出表名           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(':');                    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;    }     #endregion







0 0
原创粉丝点击