asp mvc从控制器返回json字符串的最佳方法

时间:2011-08-04 13:26:03

标签: asp.net-mvc json

我有一个简单的Action迭代dbset对每个记录执行一些操作然后通过json返回所选记录,有点像这样:

List<JsonResult> dataout = new List<JsonResult>();
foreach(var r in db.People.OrderBy("something")) {
    // do stuff to the rec
    string SubmittersName = rec.Submitter.Name;
    dataout.Add(this.Json(new { rec.Created, rec.Name, SubmittersName,  
                     OtherStuff }));
}

return new JsonResult() {
    Data = dataout.Select(r=>r),
    ContentEncoding = Encoding.UTF8,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet
};

对我而言似乎有点笨拙,但它很容易跟随什么。

(同样在返回的json中我得到ContentEncoding:null,鉴于我指定了它似乎有点奇怪)

如何改进?

普遍的赞扬/评论赞赏。

TIA。

1 个答案:

答案 0 :(得分:0)

你误用了JsonResult

JsonResult不是存储JSON数据的方法;它只是一种从视图中返回JSON数据的方法 你不应该创建它们的列表。

通过从JsonResult的集合返回JSON,您实际上将JsonResult转换为JSON,包括他们的ContentEncoding属性(您从未设置过)。

相反,您可以直接返回匿名类型的集合:

return Json(
    db.People.OrderBy(something).Select(rec => new { rec.Created, ... }),
    JsonRequestBehavior.AllowGet
);