从MVC控制器返回带有对象列表的JsonResult

我的MVC控制器中有一个简单的方法:

[HttpPost]

public JsonResult GetAreasForCompany(int companyId)

{

var areas = context.Areas.Where(x => x.Company.CompanyId == companyId).ToList();

return Json(areas);

}

这是一个区域对象:

public class Area

{

public int AreaId { get; set; }

[Required]

public string Title { get; set; }

public bool Archive { get; set; }

public virtual Company Company { get; set; }

}

这就是我从视图中调用方法的方式:

$.ajax({

url: '@Url.Action("GetAreasForCompany")',

type: 'POST',

async: false,

data: "{'companyId': " + companyId + "}",

dataType: 'json',

contentType: 'application/json; charset=utf-8',

error: function () {

alert("Server access failure!");

},

success: function (result) {

response = result;

}

});

我已经检查了控制器中的方法,并创建了Area对象的列表。您有什么主意,为什么从视图中调用该方法时为什么会出现500内部服务器错误?当我返回其他任何内容(例如Dictionary对象)时,一切正常,只是当我打算将Areas列表转换为Json时,我得到一个错误。

回答:

由于类Area包含CompanyCompany包含的集合,因此Area您的对象层次结构中可能具有循环引用,而JSON序列化器不支持循环引用。要解决此问题,请仅返回具有所需属性的匿名对象,例如

[HttpPost]

public JsonResult GetAreasForCompany(int companyId)

{

var areas = context.Areas

.Where(x => x.Company.CompanyId == companyId)

.Select(a => new

{

AreaId = a.AreaId,

Title = a.Title

});

return Json(areas);

}

以上是 从MVC控制器返回带有对象列表的JsonResult 的全部内容, 来源链接: utcz.com/qa/397287.html

回到顶部