.NET DataTable转换为JSON格式的字符串

在进行数据传递的时候,有时我们需要通过Ajax的方式或者其他的方式传递一个数据列表,可以将DataTable或者其他形式的数据列表转换为JSON的格式,通过Ajax实体的形式进行传递。

比如说:

/// <summary>
        /// DataTable 转换为Json 
        /// </summary>
        /// <param name="dt">datatable</param>
        /// <returns></returns>
        public string DataTableToJson(DataTable dt)
        {
            //如果原数据为空,则直接返回空结构
            if (dt == null || dt.Rows.Count<=0) return "{}";

            string columnFirst = "";
            List<string> result = new List<string>();
            StringBuilder Json = new StringBuilder();
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (columnFirst != dt.Rows[i][0].ToString())
                    {
                        if (i != 0)
                        {
                            AddNewJson(Json, result, dt);
                        }
                        columnFirst = dt.Rows[i][0].ToString();
                        result = new List<string>();
                        for (int k = 0; k < dt.Columns.Count; k++)
                        {
                            result.Add(""" + dt.Rows[i][k].ToString() + """);
                        }
                    }
                    else
                    {
                        for (int k = 0; k < dt.Columns.Count; k++)
                        {
                            if (!result[k].Contains(dt.Rows[i][k].ToString()))
                            {
                                result[k] += ","" + dt.Rows[i][k].ToString() + """;
                            }
                        }
                    }
                    if (i == dt.Rows.Count - 1)
                    {
                        AddNewJson(Json, result, dt);
                    }
                }
            }
            return Json.ToString();
        }

        /// <summary>
        /// 添加新的Json 
        /// </summary>
        /// <param name="Json"></param>
        /// <param name="result"></param>
        /// <param name="dt"></param>
        private void AddNewJson(StringBuilder Json, List<string> result, DataTable dt)
        {
            Json.Append("{");
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                Json.Append(""");
                Json.Append(dt.Columns[i].ColumnName);
                Json.Append("":");
                if (result[i].Contains(","))
                {
                    Json.Append("[");
                    Json.Append(result[i]);
                    if (i == dt.Columns.Count - 1)
                    {
                        Json.Append("]");
                    }
                    else
                    {
                        Json.Append("],");
                    }
                }
                else
                {
                    Json.Append(result[i]);
                    if (i != dt.Columns.Count - 1)
                    {
                        Json.Append(",");
                    }
                }
            }
            Json.Append("}");
        }
原文地址:https://www.cnblogs.com/Shang0109/p/3193766.html