DataTable转换成Json格式

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write(DataTableToJson(MyTable()));
            Console.Read();
        }

         //"{\"totalpage\":\"10\",\"data\":[\"pic1\",\"pic2\",\"pic\"]}"
         // {totalpage:10,data:[pic1,pic2,pic]}
        public static string DataTableToJson(DataTable dt)
        {
            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();
        }

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

        private static DataTable MyTable()
        {
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn();
            dc.ColumnName = "ID";
            dc.DataType = typeof(String);
            dt.Columns.Add(dc);
            dc = new DataColumn();
            dc.ColumnName = "Name";
            dc.DataType = typeof(String);
            dt.Columns.Add(dc);
            dc = new DataColumn();
            dc.ColumnName = "Score";
            dc.DataType = typeof(String);
            dt.Columns.Add(dc);
            DataRow dr = dt.NewRow();
            dr["ID"] = "01";
            dr["Name"] = "Jin";
            dr["Score"] = "10";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "01";
            dr["Name"] = "Xin";
            dr["Score"] = "20";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "01";
            dr["Name"] = "Xu";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Xin";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Jin";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Jin";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Jin";
            dr["Score"] = "40";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Jin";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "02";
            dr["Name"] = "Jin";
            dr["Score"] = "30";
            dt.Rows.Add(dr);
            return dt;
        }
    }
}

 显示结果

原文地址:https://www.cnblogs.com/jin256/p/2258644.html