我想数据表转换成JSON使用Newtonsoft.JSON却发现输出是不是有什么ExtJS的网格和图表所期望的。
我的代码
string output = JsonConvert.SerializeObject(dt, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
而这个返回的JSON字符串作为
"[{\"DAYDATE\":\"2012-05-22T00:15:00\",\"SERIES1\":3.65}]"
如果我删除“\”,并开始和结束双引号它正常工作与ExtJS的。
我也试着更改日期格式更JSON'y
string javascriptJson = JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());
结果是
"[{\"DAYDATE\":new Date(1337642100000),\"SERIES1\":3.65}]"
仍然没有运气
它看起来像你的JSON是越来越双序列化。 你虽然没有显示完整的控制器代码,我猜,你正在做这样的事情:
public ActionResult GetDataTable()
{
// (... code to build data table omitted for brevity ...)
// Serialize data table using Json.Net to avoid circular reference error
string output = JsonConvert.SerializeObject(dt,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Formatting.Indented
});
return Json(output);
}
的Json()
方法还调用序列化。 通常情况下,在一个MVC控制器,你只是使用Json()
方法序列化你的回报对象,不得单独使用Json.Net。 我可以看到你正在使用Json.Net这里,试图让当您尝试序列化数据表出现这种情况是由于循环引用除外左右。 如果你要手动序列化,那么你需要的方式返回数据,它不会得到连载第二次。 您可以使用做这个Content()
方法来代替。 试着这样说:
public ActionResult GetDataTable()
{
// Build data table
DataTable dt = new DataTable();
dt.Columns.Add("DAYDATE", typeof(DateTime));
dt.Columns.Add("SERIES1", typeof(double));
dt.Rows.Add(new DateTime(2012, 5, 22, 0, 15, 0), 3.65);
// Serialize data table using Json.Net to avoid circular reference error
string output = JsonConvert.SerializeObject(dt,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Formatting.Indented
});
// Output is already serialized; return it as is (with the appropriate media type)
return Content(output, "application/json");
}
在我的测试中,上面会产生下面的输出,我认为这是你在找什么:
[ { "DAYDATE": "2012-05-22T00:15:00", "SERIES1": 3.65 } ]