我试图将一个对象序列化为Json并将其返回到我的视图,但它在以下两种方式失败:
var json = new JavaScriptSerializer().Serialize(vm);
var json = JsonConvert.SerializeObject(vm);
以下是此控制器方法的完整代码:
public ActionResult Listagem(int id = 1)
{
int pagina = id;
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
UsuariosViewModel vm = new UsuariosViewModel
{
Usuarios = manager.Users.Where(m => m.Ativo)
.OrderBy(m => m.Nome)
.Skip((pagina - 1) * UsuariosPorPagina)
.Take(UsuariosPorPagina),
Paginacao = new Paginacao
{
PaginaAtual = pagina,
ItensPorPagina = UsuariosPorPagina
}
};
vm.Paginacao.ItensTotal = manager.Users.Where(m => m.Ativo).Count();
//var json = new JavaScriptSerializer().Serialize(vm);
var json = JsonConvert.SerializeObject(vm);
return Content(json);
}
这是我得到的错误:
我无法弄清楚我打开的DataReader在哪里。
答案 0 :(得分:2)
实体框架不会直接执行扩展方法,而是将LINQ语句保留在内存中,直到它们被使用为止。通过这种行为,您的Usuarios
对象是一个未经评估的LINQ查询,一旦访问该属性就会被激活(调试代码时很容易看到)。要直接评估查询,您可以在语句中添加.ToList()
,例如
UsuariosViewModel vm = new UsuariosViewModel
{
Usuarios = manager.Users.Where(m => m.Ativo)
.OrderBy(m => m.Nome)
.Skip((pagina - 1) * UsuariosPorPagina)
.Take(UsuariosPorPagina)
.ToList(),
Paginacao = new Paginacao
{
PaginaAtual = pagina,
ItensPorPagina = UsuariosPorPagina
}
};