在c#中返回集合(list)作为Json

时间:2017-10-02 15:52:10

标签: c# jquery asp.net json asp.net-mvc

我有这样的方法:

[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]]'。

1 个答案:

答案 0 :(得分:1)

很明显,您的角色模型包含导致问题的用户属性。

你应该选择一个匿名对象来返回

Roles = user.Roles.Select(r=> new { name = r.Name }).ToArray();