我最近遇到了一个恼人的问题.我将在这里简化我的数据模型,但原理是一样的.我有一个班级"用户".在该类中,我有一个属性,该属性是用户拥有的对象列表.我也有这个类"对象".因为每个"对象"都有一个所有者,所以它具有"User"类型的属性,该属性链接到其所有者.现在,我想要做的基本上就是这个
return Json(myUser,JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
当我加载页面时,它需要30秒,然后我得到错误"超过RecursionLimit".
我想这是因为对象是相互链接的.现在我的问题是,我怎么能告诉"Json"它不应该深入到1级对象以避免这种情况?
myUser 可能是EntityFramework生成的类型.
当你返回Json时,框架将准备每个属性实质上触发SQL命令以延迟加载所有数据.
相反,您应该准备一个具有未附加到EntityFramework的具体属性的ViewModel类,并准备该对象尽可能深.
当你的对象有自己的某些属性时,可能会发生这种情况 例如.
public object Employee()
{
string ID {get; set;}
string Name {get; set;}
int Age {get; set;}
Employee Boss{get; set;} //<-- here
}
var employee = new Employee();
return Json(employee,JsonRequestBehavior.AllowGet); //The Boss property will cause "RecursionLimit exceeded".
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况 你可以这样做:
var employee = new Employee();
var prepareForJson = new {
ID = employee.ID,
Name = employee.Name,
Age = employee.Age,
Boss = employee.Boss.ID
};
return Json(prepareForJson , JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11912 次 |
| 最近记录: |