无法将C#对象序列化为Json

时间:2014-08-19 14:32:40

标签: c# json serialization

我试图将一个对象序列化为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);
}

这是我得到的错误:

Error

我无法弄清楚我打开的DataReader在哪里。

1 个答案:

答案 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
        }
    };