次のようなMVCアクションからJSON構造を返しています。
[HttpPost]
public ActionResult GetStudents(string name)
{
//
// Filter list of students...
//
return Json(new {
aaData = students.ToList().Select(s => new [] {
String.Format(@"<span style='display:none;'>{0}</span>{1}", s.Id, s.StudentNumber),
String.Format(@"<a href='../../Student/Details/{0}'>{1}</a>", s.Id, s.FullName),
String.Format(@"<a href='../../Student/Edit/{0}'>Edit</a>", s.Id)
})
}, JsonRequestBehavior.DenyGet);
}
結果のJSONは次のようになります。
{"aaData":
[
["\u003cspan style=\u0027display:none;\u0027\u003e3\u003c/span\u003e009165",
"\u003ca href=\u0027../../Student/Details/3\u0027\u003eJohn Smith\u003c/a\u003e",
"\u003ca href=\u0027../../Student/Edit/3\u0027\u003eEdit\u003c/a\u003e"],
... Lots more ...
]
}
これは問題なく動作します。しかし、完全なJSONは約1.7MBになります。JSON内のHTMLタグがすべてユニコードでエンコードされていなければ、これを大幅に削減できると思います。JSON仕様によると、これらをエンコードする必要はないようです。
any-Unicode-character-except-"-or-\-or-control-character
.NETがこの方法でJSONを書き出さないようにする方法はありますか、または送信する必要のあるデータの量を減らす他の方法はありますか?