Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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"}

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por clovis.sardinha
      Estou em um impasse pois sei pouco de javascript. Estou fazendo um autocomplete com CI4 e Javascript.
      Consigo gerar, através do controllers/model do CI4 um arquivo em json, mas não consigo retorná-lo para o javascript para poder mostrar as opções para consulta. 
      O console.log mostra que estou obtendo o  json() { [native code] }.
      Segue os dois arquivos para ver se alguém me ajuda.
      //arquivo cidade.js async function carregar_cidade(valor) { if (valor.length >= 3) { //console.log("Pesquisar:" + valor); const dados = fetch('Testes/?cidade='+valor, { method: "get", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }); const resposta = (await dados).json; console.log(resposta); var html = "<ul class='list-group position-fixed'>"; html += "<li class='list-group-item'>" + resposta['cid_nome'] + "</li>"; html += "</ul>"; } } <?php //arquivo Testes.php namespace App\Controllers; use App\Models\CidadeModel; /** NÃO MANDAR PARA O SERVIDOR - APENAS TESTES DE FUNÇÕES E OUTROS ELEMENTOS DO CI4 */ class Testes extends BaseController{ protected $tbCidades; public function __construct(){ $this->tbCidades = new CidadeModel(); } public function index(){ $request = \Config\Services::request(); $client = \Config\Services::curlrequest(); $cidades=[]; if($get=$request->getGet()){ $cities=$get['cidade']; $cidadeFiltrada=$this->tbCidades->getCidByName($cities); $cidades= json_encode($cidadeFiltrada); //dd($cidades); } echo view('Testes/testes'); } public function salvar(){ $request = \Config\Services::request(); if($post=$request->getPost()){ dd($post); } } } <!doctype html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <title>Autocomplete</title> </head> <body> <div class="container"> <h1 class="mt-4 mb-4">Formulário</h1> <form class="row g-3"> <div class="col-12"> <label for="cidade" class="form-label">Cidade</label> <input type="text" name="cidade" class="form-control" id="cidade" placeholder="Pesquisar cidade" onkeyup="carregar_cidade(this.value)"> </div> <span ></span> </form> </div> <!-- Optional JavaScript; choose one of the two! --> <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> <script src="assets/js/cidade.js"></script> </body> </html>
    • Por FabianoSouza
      Olá pessoal.
      Eu já utilizo o FOR JSON PATH para retornar o o resultado de uma consulta com JSON. Isso eu já sei fazer.
       
      O que preciso é criar uma função que receba um SELECT como parâmetro e retorne o resultado desse SELECT já formatado como JSON.
      Estou tentando isso, mas sem sucesso.
       
      A function dbo.fn_retornaJsonPath :
      (@String NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN BEGIN IF @String <> NULL SET @String = (SELECT @String AS jsonPath FOR JSON PATH) END BEGIN IF @String IS NULL SET @String = '[]' END RETURN @String END Forma de executar:
      SET @sql = 'SELECT ' SET @sql = @sql + ' dbo.fn_retornaJsonPath ((SELECT TT.tema FROM dbo.tabela AS TT WHERE TT.cd = CTT.id)) AS ''temas'' ' SET @sql = @sql + ' FROM dbo.minhaTab AS CTT ' EXEC(@sql) Mas não está rolando....
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • Por PresleyMenezes
      Olá pessoal, gostaria de saber como copiar o conteúdo de um campo json com muitos pais e filhos e colar em outro campo de pais e filhos do mesmo arquivo json?
       
      agradeço a ajuda de vocês.
      em anexo o arquivo json e o codigo que estou tentando fazer

       

       

       
       
       
       

       

       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.