1

我想将 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?

谢谢。

4

3 回答 3

5

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

于 2012-11-11T01:25:57.973 回答
0

在数据表上应用该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);
于 2012-11-10T22:50:57.090 回答
0

你为什么不尝试这样的事情:

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 分钟内完成的辅助类

:)

于 2013-09-05T00:50:15.213 回答