返回JsonResult会导致500内部服务器错误

我正在使用jQuery的getJSON函数从我的控制器页面返回一个JsonResult。

这是网页中的jQuery代码:

$.getJSON("/Test/GetJsonWFA", null, function (data) { $(data).each(function () { alert("call succeeded"); //alert(data); }); 

这是控制器代码:

  public JsonResult GetJsonWFA() { List listWFAs = new List(); listWFAs.Add(new WorkFlowAssignment() { ID = 1, WorkFlowName = "WorkFlowName1" }); listWFAs.Add(new WorkFlowAssignment() { ID = 2, WorkFlowName = "WorkFlowName2" }); return Json(listWFAs, JsonRequestBehavior.AllowGet); } 

我收到以下错误: 500内部服务器错误

如果我用一个普通的类替换GetJsonWFA中WorkFlowAssignment一切正常。

它似乎与列表中的对象类型有关。

WorkFlowAssignment类有许多属性和方法。

谁能指出我正确的方向?

我怀疑你的WorkFlowAssignment模型有一些循环引用,不能进行JSON序列化。 我建议你使用视图模型并打破任何可能的循环引用。 使用视图模型的另一个优点是,您只需向客户端发送实际需要的属性即可进行处理。 您不需要通过线路传输客户端永远不需要的一些复杂的东西。 因此,例如,如果客户端需要的所有内容都是ID ,而WorkFlowName执行此操作:

 public ActionResult GetJsonWFA() { List listWFAs = ... var viewModel = listWFAs.Select(x => new { ID = x.ID, WorkFlowName = x.WorkFlowName }); return Json(viewModel, JsonRequestBehavior.AllowGet); } 

在客户端:

 $.getJSON("/Test/GetJsonWFA", null, function (data) { $.each(data, function (index, item) { alert('ID = ' + item.ID + ', WorkFlowName = ' + item.WorkFlowName); }); }); 

此外,您应该使用调试工具(如FireBug或Developer Toolbar)来检查浏览器发送的AJAX请求,并分析服务器响应以发现最终错误。 当AJAX请求失败时,您作为开发人员的第一反应应该是启动调试工具并确切地查看正在发送的请求/响应。