datatable 和 json 互相转化

本文介绍如何将DataTable转换为JSON,并提供可以追加额外JSON信息的代码示例。同时,也展示了如何将多个DataTable转换为JSON。对于反向操作,即从JSON转换回DataTable,作者提供了方法,但强调该方法仅适用于特定格式的JSON,即由先前的转换方法生成的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在最近的开发中经常要用到吧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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值