C#DataTable到Json?

时间:2012-11-10 22:42:44

标签: c# json datatable

我希望将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?

感谢。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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);

答案 2 :(得分: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分钟内完成的助手课程

:)