【问题标题】:C# DataTable to Json?C# 数据表到 Json?
【发布时间】:2012-10-30 21:02:51
【问题描述】:

我想将 DataTable 作为 Json 格式显示在图表上。

public JsonResult GetDataTable()
{
    DataTable dt = new DataTable();

    dt.Columns.Add("Jan");
    dt.Columns.Add("Feb");
    dt.Columns.Add("Mar");
    dt.Columns.Add("Apr");

    for (int i = 0; i < 10; i++)
    {
        dt.Rows.Add(i * 5, i * 10, i * 15, i * 11);
    }

    // JsonDataTable = dt to Json

    return new JsonResult
    {
        Data = new
        {
            success = true,
                chartData = JsonDataTable 
        },
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
}

如何将 DataTable 转换为 Json?

谢谢。

【问题讨论】:

标签: c# json datatable


【解决方案1】:

在数据表上应用AsEnumerable 方法,然后在其上应用一些 LINQ 以获得所需的形式。

var thatList=(from p in dt.AsEnumerable() 
                 select new { 
                               Jan= p.Field<string>("Jan"),
                               Feb = p.Field<string>("Feb"),
                               Mar = p.Field<string>("Mar"),
                               Apr = p.Field<string>("Apr")
                            }).ToList();

现在您可以使用thatList 转换为Json。

return Json(new { status = true, chartData = thatList }, 
                                    JsonRequestBehavior.AllowGet);

【讨论】:

    【解决方案2】:

    您可以使用 JSON.NET 自动将 DataTables(以及许多其他类型!)序列化为 JSON。

    【讨论】:

    • 您基本上可以忘记 .NET Fx 中内置的关于 JSON 的任何内容,您会对此感觉无限好。 (JSON.NET 有效,令人难以置信。)
    • 确实如此。自从我使用 JSON.NET 以来,已经保存了这么多被拉扯的头发:D
    【解决方案3】:

    你为什么不试试这样的:

    public static class JSONEncoderHelper
    {
        public static string FromXML(DataTable table)
        {
            StringBuilder sbuilder = new StringBuilder();
    
            sbuilder.Append("{\"");
            sbuilder.Append(table.TableName);
            sbuilder.Append("\":[");
    
            bool first = true;
            foreach (DataRow drow in table.Rows)
            {
                if (first)
                {
                    sbuilder.Append("{");
                    first = false;
                }
                else
                    sbuilder.Append(",{");
    
                bool firstColumn = true;
                foreach (DataColumn column in table.Columns)
                {
                    if (firstColumn)
                    {
                        sbuilder.Append(string.Format("\"{0}\":\"{1}\"", column.ColumnName, drow[column].ToString()));
                        firstColumn = false;
                    }
                    else
                    sbuilder.Append(string.Format(",\"{0}\":\"{1}\"", column.ColumnName, drow[column].ToString()));
                }
                sbuilder.Append("}");
            }
    
            sbuilder.Append("]}");
    
            return sbuilder.ToString();
        }
    }
    

    你现在要做的就是重构我在 2 分钟内完成的辅助类

    :)

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多