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 } ]