amcharts 的 DataTable 到 JSON 字符串

DataTable to JSON string for amcharts

我的模型中有一个方法可以查询我的 SQL 服务器数据库并将结果存储在数据表中。然后,我使用以下方法将该数据表转换为 JSON 字符串。

public void ConvertDataTabletoJSONString(DataTable dt)
{
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;

    foreach (DataRow dr in dt.Rows)
    {
        row = new Dictionary<string, object>();
        foreach (DataColumn col in dt.Columns)
        {
            row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }

    JSONstring =  serializer.Serialize(rows);
}

我的控制器是这样的:

    public ActionResult getMonthlyData()
    {
        TDR_Monthly viewModel = new TDR_Monthly();
        viewModel.getList(0);
        return Json(viewModel.JSONstring, JsonRequestBehavior.AllowGet);
    }

我的视图 javascript AmCharts.makechart dataLoader 有这个:

        "dataLoader":
        {
            "url": "../TDR_MonthlyController/getMonthlyData",
            "format": "json"
        }

当我 "test" 该字符串的输出(通过在我的视图中显示字符串的内容,它在浏览器中正确显示,如下所示:

 [{"REGION":"Atlanta", "STATE_NAME":"Alabama", "STATE":"AL", "CATEGORY_ID":"0 ", "CATEGORY":"No Group", "COUNT":100, "DEFICIENCY1":0, "DEFICIENCY2":0, "RESCIND1":0, "RESCIND2":0}]

但是,当我修改浏览器的 URL 以执行 JSON 调用(http://localhost:49777/Monthly/getMonthlyData)并打开 JSON 文件时,看起来它有一个额外间距和字符的废话:

"[{\"REGION\":\"Atlanta             \",\"STATE_NAME\":\"Alabama                                                                                                                                                                                                                                                       \",\"STATE\":\"AL\",\"CATEGORY_ID\":\"0        \",\"CATEGORY\":\"No Group                                               \",\"COUNT\":100,\"DEFICIENCY1\":0,\"DEFICIENCY2\":0,\"RESCIND1\":0,\"RESCIND2\":0}]

视图本身告诉我它无法解析它

Error parsing JSON file: ../TDR_MonthlyController/getMonthlyData

如有任何帮助,我们将不胜感激!!!

getMontlhyData 中,尝试更改

return Json(viewModel.JSONstring);

return Content(viewModel.JSONstring, "application/json");

因为您已经有了一个 JSON 字符串。 Json() 方法正在再次序列化它。