【问题标题】:DataTable to JSON string for amcharts用于 amcharts 的 DataTable 到 JSON 字符串
【发布时间】:2017-05-24 22:52:54
【问题描述】:

我的模型中有一个方法可以查询我的 SQL Server 数据库并将结果存储在数据表中。然后,我使用以下方法将该数据表转换为 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"
        }

当我“测试”该字符串的输出时(通过在我的视图中显示字符串的内容,它会在浏览器中正确显示,如下所示:

 [{"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

任何帮助将不胜感激!!!

【问题讨论】:

  • 这些列是char 还是varchar
  • 您是否对字符串进行双重序列化?也许this question 的答案可能会有所帮助。
  • @Anderson Pimentel 我的专栏由 varchars 和 ints 组成。
  • xorspark 似乎这可能是问题所在,但现在我不知道如何将我的数据表转换为正确的 JSON 格式进行解析。
  • 尝试return Content(viewModel.JSONstring... 而不是return Json(viewModel.JSONstring...,因为您已经有一个 JSON 字符串。

标签: json asp.net-mvc-4 amcharts


【解决方案1】:

getMontlhyData,尝试更改

return Json(viewModel.JSONstring);

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

因为您已经有一个 JSON 字符串。 Json() 方法再次对其进行序列化。

【讨论】:

  • 天哪,太完美了!谢谢!!! JSON文件看起来应该是这样,现在我只需要弄清楚为什么amcharts仍然显示它无法解析文件=/你认为是因为返回内容不会创建实际的JSON文件吗??
  • 可能缺少内容类型。检查更新的答案。
  • 是的,这会生成 JSON 文件,但 amcharts 仍然抱怨无法解析。如果我找到一个,我将向他们的支持中心发送消息并发布解决方案。非常感谢您的帮助。
猜你喜欢
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2013-03-26
相关资源
最近更新 更多