gpt4 book ai didi

javascript - 使用 Json.Net 转换 DataTable 时使用 Json 的格式无效

转载 作者:行者123 更新时间:2023-11-30 17:50:24 24 4
gpt4 key购买 nike

我正在尝试使用 Newtonsoft.JSON 将 DataTable 转换为 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 正在双重序列化。虽然您没有显示完整的 Controller 代码,但我猜您正在做这样的事情:

    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 Controller 中,您只需使用 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 } ]

关于javascript - 使用 Json.Net 转换 DataTable 时使用 Json 的格式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19156485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com