none
Converter json para datatable RRS feed

  • Pergunta

  • Boa tarde,

    Preciso lconverter json para datable, alguém. Inicialmente estou fazendo a seguinte gambiarra. Passo os registros para um datagridview e depois passo o datatable, mas gostaria de passar direto para o datatable, dessa forma não preciso do controle datagridview. Desde já agradeço

     private async void PegarRegistros()
            {
                
                using (var client = new HttpClient())
                {
                    using (var response = await client.GetAsync(URI))
                    {
                        if (response.IsSuccessStatusCode)
                        {
    
                            var AlunoJsonString = await response.Content.ReadAsStringAsync();
                            dataGridView1.DataSource = JsonConvert.DeserializeObject<VendasDAO[]>(AlunoJsonString).ToList();
    
                            DataTable tabela = new DataTable();
                            tabela = (DataTable)(dataGridView1.DataSource);
    
                           // tabela =  JsonConvert.DeserializeObject<VendasDAO[]>(AlunoJsonString, (typeof(DataTable)).ToList();
    
                            //Percorre as linhas da tabela1 
                            foreach (DataRow row in tabela.Rows)
                            {
    
    
    
                            }
    
    
                        }
                        else
                        {
                            MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode);
                        }
                    }
                }
            }


    Se for para responder "procure no google", nem perca seu tempo ! :)

    quinta-feira, 14 de junho de 2018 15:15

Respostas

  • Perdoe minha pergunta mas!

    Você já tem uma lista com base no JSON, então você "joga" pra um GRID (Propriedade DATASOURCE) pra depois fazer um cast do DATASOURCE como DATATABLE, pra então fazer um foreach no DATATABLE?

    a Pergunta é: POR QUE?

    Por favor tente explicar o que vc precisa.

    Caso contrário, um foreach na LIST me parece que lhe atende muito mais.

    Exemplo (com base em seu próprio código):

    async void PegarRegistros()
            {
                
                using (var client = new HttpClient())
                {
                    using (var response = await client.GetAsync(URI))
                    {
                        if (response.IsSuccessStatusCode)
                        {
    
                            var AlunoJsonString = await response.Content.ReadAsStringAsync();
                            ;
    
                            //Percorre as linhas da tabela1 
                            foreach (VendasDAO item in JsonConvert.DeserializeObject<VendasDAO[]>(AlunoJsonString).ToList<VendasDAO>() )
                            {
    
    
    
                            }
    
    
                        }
                        else
                        {
                            MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode);
                        }
                    }

    Espero que tenha lhe ajudado.

    Caso lhe atenda, não se esqueça de marcar a resposta como válida e que foi útil (isso é muito importante).

    Um abraço.

    Anderson.

    quinta-feira, 14 de junho de 2018 18:47

Todas as Respostas

  • Boa tarde,

     Crie um método de extensão:

    public static DataTable ToDataTable<T>(this IList<T> data)
    {
        PropertyDescriptorCollection props =
        TypeDescriptor.GetProperties(typeof(T));
        DataTable table = new DataTable();
        for(int i = 0 ; i < props.Count ; i++)
        {
        PropertyDescriptor prop = props[i];
        table.Columns.Add(prop.Name, prop.PropertyType);
        }
        object[] values = new object[props.Count];
        foreach (T item in data)
        {
        for (int i = 0; i < values.Length; i++)
        {
            values[i] = props[i].GetValue(item);
        }
        table.Rows.Add(values);
        }
        return table;        
    }

     E atribua:

    var dataTable = VendasDao.ToList().ToDataTable<VendasDAO>();
     Fonte: Converter JSon para DataTable

    quinta-feira, 14 de junho de 2018 18:46
  • Perdoe minha pergunta mas!

    Você já tem uma lista com base no JSON, então você "joga" pra um GRID (Propriedade DATASOURCE) pra depois fazer um cast do DATASOURCE como DATATABLE, pra então fazer um foreach no DATATABLE?

    a Pergunta é: POR QUE?

    Por favor tente explicar o que vc precisa.

    Caso contrário, um foreach na LIST me parece que lhe atende muito mais.

    Exemplo (com base em seu próprio código):

    async void PegarRegistros()
            {
                
                using (var client = new HttpClient())
                {
                    using (var response = await client.GetAsync(URI))
                    {
                        if (response.IsSuccessStatusCode)
                        {
    
                            var AlunoJsonString = await response.Content.ReadAsStringAsync();
                            ;
    
                            //Percorre as linhas da tabela1 
                            foreach (VendasDAO item in JsonConvert.DeserializeObject<VendasDAO[]>(AlunoJsonString).ToList<VendasDAO>() )
                            {
    
    
    
                            }
    
    
                        }
                        else
                        {
                            MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode);
                        }
                    }

    Espero que tenha lhe ajudado.

    Caso lhe atenda, não se esqueça de marcar a resposta como válida e que foi útil (isso é muito importante).

    Um abraço.

    Anderson.

    quinta-feira, 14 de junho de 2018 18:47
  • Perdoe minha pergunta mas!

    Você já tem uma lista com base no JSON, então você "joga" pra um GRID (Propriedade DATASOURCE) pra depois fazer um cast do DATASOURCE como DATATABLE, pra então fazer um foreach no DATATABLE?

    a Pergunta é: POR QUE?

    Por favor tente explicar o que vc precisa.

    Caso contrário, um foreach na LIST me parece que lhe atende muito mais.

    Exemplo (com base em seu próprio código):

    async void PegarRegistros()
            {
                
                using (var client = new HttpClient())
                {
                    using (var response = await client.GetAsync(URI))
                    {
                        if (response.IsSuccessStatusCode)
                        {
    
                            var AlunoJsonString = await response.Content.ReadAsStringAsync();
                            ;
    
                            //Percorre as linhas da tabela1 
                            foreach (VendasDAO item in JsonConvert.DeserializeObject<VendasDAO[]>(AlunoJsonString).ToList<VendasDAO>() )
                            {
    
    
    
                            }
    
    
                        }
                        else
                        {
                            MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode);
                        }
                    }

    Espero que tenha lhe ajudado.

    Caso lhe atenda, não se esqueça de marcar a resposta como válida e que foi útil (isso é muito importante).

    Um abraço.

    Anderson.

    Olá,

    Então, estou consumindo essa web api, o que eu preciso mesmo é filtrar os registros da lista, nesse exemplo eu tenho na lista um registro do tipo boolean, se ele vim como 0, vou executar uma ação no meu sistema desktop, se vir como 1, vou executar outra ação. Obviamente EU não consiguir fazer isso diretamente com o json, por esse motivo gostaria de passar para um datatable.

    Vou testar seu exemplo, parece ser bem útil. Obrigado


    Se for para responder "procure no google", nem perca seu tempo ! :)


    quinta-feira, 14 de junho de 2018 19:23
  • Por favor, verifique. Se não conseguir, poste aqui até onde você foi e descreva sua necessidade.

    Não se esqueça de marcar a resposta como útil.

    Atenciosamente,

    Anderson.

    quinta-feira, 14 de junho de 2018 21:24
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 22 de junho de 2018 19:16
    Moderador