返回JsonResult结果500内部服务器错误

Returning JsonResult results in 500 Internal Server Error

本文关键字:服务器 错误 内部 JsonResult 结果 返回      更新时间:2023-09-26

我使用jQuery的getJSON函数从我的控制器返回一个JsonResult

jQuery

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

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

如果我将GetJsonWFA中的WorkFlowAssignment替换为一个平凡的类,一切都可以工作。

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

WorkFlowAssignment类有许多属性和方法。 谁能给我指个正确的方向?

我怀疑你的WorkFlowAssignment模型有一些不能JSON序列化的循环引用。我建议您使用视图模型,并打破任何可能的循环引用。使用视图模型的另一个优点是,您将只向客户端发送执行处理所需的属性。您不需要通过网络传输一些客户端永远不需要的复杂内容。因此,例如,如果您的客户端需要的一切都是IDWorkFlowName,请这样做:

public ActionResult GetJsonWFA() {
    List<WorkFlowAssignment> 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请求失败时,作为开发人员的第一反应应该是启动调试工具并查看正在发送的请求/响应。