Jump to content
Sign in to follow this  
danilo.meneghel

Json Serialize via REST (C#, ASPX)

Recommended Posts

Pessoal,

 

Estou com problema na hora de mostrar os dados via Json que vem de um WS.

Abaixo está o código que eu montei:

 

View endereco.aspx.cs

public partial class endereco : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                GetData();
            }
        }

        private void GetData()
        {
         HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://api.postmon.com.br/v1/cep/30640-240");
            
            using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
            {

                using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
                {
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    var objText = reader.ReadToEnd();
                    Endereco end = (Endereco)js.Deserialize(objText, typeof(Endereco));

                    Response.Write(end);
                }

            }
        }
    }

Model endereco.cs

public class Endereco
    {
        public string complemento { get; set; }
        public string bairro { get; set; }
        public string cidade { get; set; }
    }

Ao compilar o código não é carregado os dados, somente aparece escrito "Models.Endereco".

Também quero saber se é obrigatório colocar todos os campos do WS na Model, ou se dá para colocar somente os campos que quiser ser exibido.

 

 

 

Share this post


Link to post
Share on other sites

Tentei deserealizar dessa outra forma, porém também não deu certo:

//List<Endereco> endereco = (List<Endereco>)js.Deserialize(objText, typeof(List<Endereco>));

                    List<Endereco> endereco = (List<Endereco>)Newtonsoft.Json.JsonConvert.DeserializeObject(objText, typeof(List<Endereco>));

                    
                    foreach (var item in endereco)
                    {
                        Response.Write("nome: " + item.bairro + " track: " + item.cidade);
                    }


Após eu coloquei um foreach para ler os dados e assim escreve-lo.

Tentei de várias formas, mas até o momento sem sucesso.

 

Alguém saberia me dizer como eu faço para escrever esses dados na tela?

 

O objeto Json esperado é esse:

{"complemento": "de 9201 ao fim - lado \u00edmpar (lado par pertence a(o) Contagem)", "bairro": "Barreiro", "cidade": "Belo Horizonte", "logradouro": "Avenida Teresa Cristina", "estado_info": {"area_km2": "586.519,727", "codigo_ibge": "31", "nome": "Minas Gerais"}, "cep": "30640240", "cidade_info": {"area_km2": "331,401", "codigo_ibge": "3106200"}, "estado": "MG"}

Share this post


Link to post
Share on other sites

Oi, eu consegui fazer funcionar da seguinte forma:

 

Arquivo Controller

public class WSController
    {
        public List<Result> GetData()
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://api.postmon.com.br/v1/cep/30640-240");

            EndModel end = new EndModel();

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    var objText = reader.ReadToEnd();

                    end = (EndModel)js.Deserialize(objText, typeof(EndModel));
                }
            }
            return end;
        }
    }

 

Arquivo View

WSController ws = new WSController();
var enderecos = ws.GetData(txtFiltro.Text);

                grid.DataSource = enderecos;            
                grid.DataBind();    

Eu percebi que o problema tava era na montagem da Model.

Montei uma lista de objetos, após enviei para o DataSource, com isso apareceu os dados de forma correta.

 

Outro detalhe está no retorno dos dados Json, se estiver dentro de uma matriz tem que pegar somente o que realmente quer para assim conseguir montar na GridView.

Share this post


Link to post
Share on other sites

Agora eu estou tendo dificuldade em conseguir converter um dado Date (yyyy-MM-ddThh:mm:ssZ) em (dd-MM-yyyy) dentro da GridView que foi gerado com outro endereço REST.

 

 

Tentei dessa forma dentro da GridView

<asp:BoundField DataField="releaseDate" HeaderText="Data" ApplyFormatInEditMode="True" DataFormatString="{0:dd/MM/yyyy}" />

Também tentei dessa outra forma dentro do arquivo aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {
            grid.Columns[3].DefaultCellStyle.Format = "dd/MM/yyyy";
        }
        

Porém, as duas formas sem sucesso.

 

Na parte DefaultCellStyle ficou sublinhado dando erro.

Será que é preciso importar algum arquivo ou classe?

Share this post


Link to post
Share on other sites

Então, nesse caso não da erro nenhum.

Simplesmente não converte a data pro nosso formato.

 

Eu queria saber se alguém já conseguiu converter isso em C# ou em ASPX?

Dentro do GridView é claro.

 

 

Ninguém aqui sabe como converter a data no GridView para outro formato?

 

 

Pessoal,

 

Descobri que não é preciso colocar mais nada.

O problema estava na montagem da Model, onde o campo "releaseDate" precisa estar com o tipo DateTime.

 

Agora estou com outro problema.

Como eu transformo uma hora em milisegundo (183721) no formato mm:ss?

 

Coloquei na Model como sendo do tipo TimeSpan, mas não funcionou.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Pinduca1
      Bom dia! queria saber como consigo eliminar itens de uma estrutura de pilha ate agora só sei adicionar itens automático preciso disse com urgência
      #include <iostream> #define tamanho 5 using namespace std; int d; struct Pilha { int topo; int item [tamanho]; }; void iniciaPilha(Pilha &p){ p.topo = -1; } bool pilhaVazia (Pilha &p){ if (p.topo == -1){ return true; } else { return false; } } bool pilhaCheia (Pilha &p ){ if (p.topo == tamanho-1){ return true; } else { return false; } } void empilha(Pilha &p, int valor){ p.topo ++; p.item[p.topo]= valor; } int desempilha(Pilha &p) { return (p.item[p.topo--]); } int main (){ Pilha s; iniciaPilha(s); //verifica se esta vazia if (pilhaVazia(s)) cout << "Pilha vazia" << endl; else cout << "A Pilha nao esta vazia" << endl; for (d=0; d<tamanho; d++){ //Verifica se esta cheia if (pilhaCheia(s)) cout << "A Pilha cheia" << endl; else empilha(s,(d+2)); cout << "Item empilhado: " << (d+2) << endl; cout<< "O topo da pilha: " << s.topo << endl; system("pause"); } for (d=0; d<tamanho; d++){ //Verifica se esta cheia if (pilhaVazia(s)) cout << "A Pilha vazia" << endl; else cout << "Item desempilhado: " << desempilha(s) << endl; cout<< "O topo da pilha: " << s.topo << endl; system("pause"); } return 1; }
    • By adolfo-moro
      Tenho um sistema feito em C# em Windows Form, gostaria de saber se tem algum jeito Do sistema abrir o navegador padrão do sistema Operacional, direcionar para meu site onde terá uma tela de login, a pessoa efetua o login e quando o mesmo for validado, o navegador fechar e voltar para o sistema com o valor do cookie gerado pelo site ou com um código do login, para efetuar posteriores operações por webservice.
      Não seria utilizando o WebBrowser
    • By frlopes
      Pessoal, boa tarde. 
       
      Estou com alguns probleminhas, se alguém puder me ajudar, agradeço imensamente!
      Tenho uma aplicação windows form em c# que tem um DataGridView, neste DataGridView tenho 2 colunas que são DataGridViewComboBoxColumn.
      O que eu espero que aconteça? Quando selecionado o valor de um, jogar o "Value" na coluna anterior. Enfim, Tentei com o código abaixo, porém, estou com alguns problemas:
       
      1 - Só consigo selecionar um item do grid, clicando 2 x no mesmo, a primeira vez que eu clico, não abre a lista de seleção, somente na segunda vez.
       
      2 - As vezes, retorna o valor "System.Data.DataRowView" na coluna anterior.
       
      3 - Os combos, coincidentemente, serão carregados com o mesmo valor, mas caso não fossem, como eu deveria fazer?
       
      4 - Existe uma forma de eu adicionar um item manualmente, por exemplo, como estão trazendo uma lista do banco de dados, supondo que eu traga "Santos", "São vicente", "Guarujá" e queira que o primeiro item seja "<selecione>", que não faz parte do banco de dados, não está no meu DataTable, como faço neste caso? 
       
       
      Obrigada, pessoal... 

       
       
      public FrmAlterarTipoAcomodacao() { InitializeComponent(); } TipoAcomodacao tipoAcomodacao = new TipoAcomodacao(); public void CarregarTipoAcomodacao() { DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao(); col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacao.DataSource = dtbTipoAcomodacao; col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao; } private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e) { dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); CarregarTipoAcomodacao(); dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing); } public FrmAlterarTipoAcomodacao() { InitializeComponent(); } TipoAcomodacao tipoAcomodacao = new TipoAcomodacao(); public void CarregarTipoAcomodacao() { DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao(); col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacao.DataSource = dtbTipoAcomodacao; col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao; } private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e) { dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); CarregarTipoAcomodacao(); dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing); } ComboBox combo; private void dgvProfissional_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { ComboBox comboBox = e.Control as ComboBox; if (comboBox != null) { comboBox.SelectedIndexChanged -= new EventHandler(combo_SelectedIndexChanged); comboBox.SelectedIndexChanged += combo_SelectedIndexChanged; } } private void combo_SelectedIndexChanged(object sender, EventArgs e) { if ((sender as ComboBox).SelectedIndex > 0) { string selected = (sender as ComboBox).SelectedValue.ToString(); if (dgvProfissional.CurrentCell.ColumnIndex == 11) { dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacao"].Value = selected; } if (dgvProfissional.CurrentCell.ColumnIndex == 18) { dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacaoAutorizada"].Value = selected; } } }  

    • By Rui PG
      Boa tarde, Amigos!
      Por favor, alguém poderia me ajudar nessa questão, sou novo em desenvolvimento e estou a semanas tentando resolver esse problema.
      Desenvolvi um DataGrid emWPF preciso que quando o usuário clicar no "botão adicionar", gere automaticamente uma espécie de numeração sequencial no campo "followup", porém ao decorrer dos lançamentos dos dados no DataGrid, gere um numero sequencial ordenado do maior para o menor, ou seja, o último registro incluído no datagrid vai receber a última posição, conforme a prototipação da tela abaixo.
       
      Prototipação:

       
      XAML da Construção do DATAGRID:

       
      Código em C# do evento do botão adicionar, só falta colocar esse tipo de contador para o campo “follow-up”, na qual está destacado na figura:

       
      segue o código do botão adicionar onde tenho que programar essa auto numeração.
             public class JogaDadoNoGrid  
              {
                  public string bdgDtRegistro { get; set; }
                  public string bdgFollowup { get; set; }
                  public string bdgDtAgendamento { get; set; }
                  public string bdgHorario { get; set; }
                  public bool bdgVisitaRealizada { get; set; }
                  public bool bdgNaoRealizada { get; set; }
                  public bool bdgDesistiu { get; set; }
                  public string bdgMotivo { get; set; }
                  public string bdgObservacao { get; set; }
              }

              private void btnAddGrid_Click(object sender, RoutedEventArgs e)
              {
                JogaDadoNoGrid DadosTemporario = new JogaDadoNoGrid();

                  DadosTemporario.bdgDtRegistro = txtDataAtual.Text;
                  DadosTemporario.bdgFollowup = "AQUI QUE EU PRECISO GERAR O 1º, 2º, 3º ...."; 
                  DadosTemporario.bdgHorario = txtHorario.Text;
                  DadosTemporario.bdgDtAgendamento = txtDataAgendamento.Text;
                  DadosTemporario.bdgVisitaRealizada = chkVisitaRealizada.IsChecked.Value;
                  DadosTemporario.bdgNaoRealizada = chkNaoRealizada.IsChecked.Value;
                  DadosTemporario.bdgDesistiu = chkDesistiu.IsChecked.Value;
                  DadosTemporario.bdgMotivo = "Teste... Teste... Teste";
                  
                  DtgCadastroVisitantes.Items.Add(DadosTemporario);

                  txtDataAtual.Text = "";
                  txtDataAgendamento.Text = "";
                  txtHorario.Text = "";
                  chkDesistiu.IsChecked = false;
                  chkNaoRealizada.IsChecked = false;
                  chkVisitaRealizada.IsChecked = false;           
              }
       
       
       
      Agradeço aos amigos, pela ajuda.
       
    • By Gilberto Jr
      Boa tarde.
       
      Eu esto com um probleminha que eu não estou conseguindo resolver.
       
      Estou lendo um json atraves de uma webservice https://jsonplaceholder.typicode.com/photos atraves do codigo abaixo.
       
      <html> <head> <title>Teste</title> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script> <!-- Adicionando Javascript --> <script type="text/javascript" > $(document).ready(function(){ $("#search").click(function(){ $.ajax({ type: "GET", dataType: "json", url: "https://jsonplaceholder.typicode.com/photos", success: function(data) { for (var i in data) { //vai passar por todos os objetos dentro do array $("#title").text(data[i]["title"]); $("#id").text(data[i]["id"]); $("#albumId").text(data[i]["albumId"]); $("#thumbnailUrl").attr("src",data[i]["thumbnailUrl"]); $("#url").attr("src",data[i]["url"]); } } }); }) }); // END Function, END ready </script> </head> <body> <input type="button" placeholder="Busca" id="search" value="Buscar"> <section> <div class="container"> <div class="row" id="content"> <br/> <div id="id"></div><br/> <div id="albumId"></div><br/> <div id="title"></div><br/> <img src="" id="thumbnailUrl"><br/> <img src="" id="url"><br/> </div> </div> </section> </body> </html> Eu estou até conseguindo trazer as informações. Porem vem o ultimo dado do JSON, 
       
      E eu também, tenho que mostrar todas as informações do arquivo JSON. Fazer um for para mostrar todos os dados na tela.
       
      Mas eu não estou conseguindo, poderia me ajudar?
       
      Att;
      Gilberto Jr
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.