none
Como converter um IList<Object> para um JSONArray ? RRS feed

  • Pergunta

  • Estou tentando converter um IList<Object> para um JSONArray e não estou conseguindo, andei pesquisando e vi alguns posts falando pra usar o JSON.Net que tbm testei e ainda não consegui fazer. 

    Como fazer isso ?

    Estou tentando assim.

    // retorna JsonArray de todas as categorias
    public JsonResult findAllCategorias(){
    
       IList<Categoria> lista = dao.findAll();
       return Json(lista);
    }
    
    //retorna JsonArray com biblioteca JSON.Net
    public ContentResult findAllCategorias(){
       
       IList<Categoria> lista = dao.findAll();
       var jsonArray = JsonConvert.SerializeObject(lista, Formatting.Indented);
    
       return Content(jsonArray, "application/json");
    
    }


    Quero meu retorno de JSONArray assim

    { Categoria: [ 

      {id:1, descricao:"pizzas"},

      {id:2, descricao:"lanches"} 

    ]

    • Editado Paiva Fernando sexta-feira, 4 de novembro de 2016 18:47 mais informacoes
    sexta-feira, 4 de novembro de 2016 18:44

Respostas

  • Bom pessoal, como não consegui fazer isso usando o serializable diretamente na entidade e pelo que pesquisei é por conta do NHibernate, encontrei uma dica bem bacana para criar uma classe de modelo JSON da entidade que preciso e enfim funcionou perfeitamente.

    ficou assim.

    Entidade modelo JSON 

    public class CategoriaJsonModel {
    
        public long id {get;set;}
        public String descricao {get;set;}
    
        public CategoriaJsonModel(){}
        public CategoriaJsonModel(long id, String descricao){
           this.id = id;
           this.descricao = descricao;
        }
    }

    E depois instancio essa classe passando os valores da entidade Categoria e retorno o Json do model.

    public JsonResult findAllCategorias(){
    
       IList<Categoria> lista = dao.findAll();
       IList<CategoriaJsonModel> listaModel = new List<CategoriaJsonModel>();
    
       foreach(Categoria c in lista){
          listaModel.add(new CategoriaJsonModel(c.id, c.descricao);
       }
       return Json(listaModel);
    }

    Pronto, 100% funcionando. 

    obrigado a todos !



    • Marcado como Resposta Paiva Fernando sábado, 5 de novembro de 2016 03:42
    sábado, 5 de novembro de 2016 03:19

Todas as Respostas

  • Qual é o resultado que voce obtem? O que voce fez esta certo.. vai depender muito de como voce definiu a classe Categoria.

    de qualquer forma eu sugiro que voce use o formato abaixo, caso seja para utilizaçao em um metodo Ajax:

    public JsonResult findAllCategorias(){
    
       IList<Categoria> lista = dao.findAll();
       return Json(new { Categoria= lista},JsonRequestBehavior.AllowGet);
    
    }

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------



    sexta-feira, 4 de novembro de 2016 18:47
    Moderador
  • Na controle já existe um método que faz isso, conforme link abaixo.

    https://msdn.microsoft.com/pt-br/library/system.web.mvc.jsonresult(v=vs.118).aspx

    sexta-feira, 4 de novembro de 2016 18:51
  • Olá,

    Fiz uma live sobre isso. Segue: https://www.youtube.com/watch?v=hyASCgatZsg

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 4 de novembro de 2016 19:01
  • Pessoal, eu acredito que o problema seja pq estou usando o NHibernate/FluentNHibernate e por isso não estou conseguindo serializar este IList<Categoria> para um JSONArray. Estou procurando a solução, se alguém ja fez isso com NHibernate/FluentNHibernate e puder ajudar, agradeço. !
    sexta-feira, 4 de novembro de 2016 19:28
  • É independente., nao creio que seja isso.

    Tem certeza que esse codigo:

     IList<Categoria> lista = dao.findAll();

    Traz uma lista de categorias?

    O normal é fazer algo assim:

    var categorias = session.CreateCriteria<Categoria>().List<Categoria>();

    O que voce obtem como resultado? Pode postar o codigo da classe categoria?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    sexta-feira, 4 de novembro de 2016 19:56
    Moderador
  • Sim William, a lista contem os objetos Categoria, eu faço um foreach nela e exibe as categorias e no o Count tbm mostra a quantidade de objetos dentro do IList. Pelo que andei pesquisando tem um esquema pra fazer quando eh NHibernate, mas ainda não consegui resolver. 

    Encontrei uma resposta aqui link e estou tentando implementar

    sexta-feira, 4 de novembro de 2016 20:40
  • Bom pessoal, como não consegui fazer isso usando o serializable diretamente na entidade e pelo que pesquisei é por conta do NHibernate, encontrei uma dica bem bacana para criar uma classe de modelo JSON da entidade que preciso e enfim funcionou perfeitamente.

    ficou assim.

    Entidade modelo JSON 

    public class CategoriaJsonModel {
    
        public long id {get;set;}
        public String descricao {get;set;}
    
        public CategoriaJsonModel(){}
        public CategoriaJsonModel(long id, String descricao){
           this.id = id;
           this.descricao = descricao;
        }
    }

    E depois instancio essa classe passando os valores da entidade Categoria e retorno o Json do model.

    public JsonResult findAllCategorias(){
    
       IList<Categoria> lista = dao.findAll();
       IList<CategoriaJsonModel> listaModel = new List<CategoriaJsonModel>();
    
       foreach(Categoria c in lista){
          listaModel.add(new CategoriaJsonModel(c.id, c.descricao);
       }
       return Json(listaModel);
    }

    Pronto, 100% funcionando. 

    obrigado a todos !



    • Marcado como Resposta Paiva Fernando sábado, 5 de novembro de 2016 03:42
    sábado, 5 de novembro de 2016 03:19