我有这样的方法:
[HttpPost]
[ActionName("GetUserData")]
public ActionResult GetUserData()
{
using (var ctx = new myEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
ctx.Configuration.ProxyCreationEnabled = false;
var user = ctx.Users.Include("UserRoles").FirstOrDefault(x => x.UserId == 4);
ctx.Configuration.LazyLoadingEnabled = true;
ctx.Configuration.ProxyCreationEnabled = true;
return Json(new
{
Email = user.Email,
Roles = user.UserRoles
}, JsonRequestBehavior.AllowGet);
}
}
帖子是通过jQuery完成的:
$.post("/Administrator/GetUserData", function (data) {
console.log(data);
});
我试图写出返回的数据,但是当我编写上面的代码时控制台显示内部错误500 ...
在其他情况下,返回的结果如下:
return Json(new
{
Email = user.Email
// returning just email for example to see in console..
},JsonRequestBehavior.AllowGet);
只返回电子邮件作为简单的简单字符串工作正常,但当我尝试通过JSON将用户的角色作为数组返回时,我会遇到上述问题......
集合UserRoles属于ICollection类型...
我在这里做错了什么?
P.S。伙计们我挖出了例外,它就像是:
异常详细信息:System.InvalidOperationException:在序列化类型为&System; Series.Collections.Generic.HashSet`1 [[MyModel.Models.DatabaseConnection.UserRoles,MyEntity,Version = 1.0]的对象时检测到循环引用。 0.0,Culture = neutral,PublicKeyToken = null]]'。
答案 0 :(得分:1)
很明显,您的角色模型包含导致问题的用户属性。
你应该选择一个匿名对象来返回
Roles = user.Roles.Select(r=> new { name = r.Name }).ToArray();