Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Qual é o resultado quando você tenta desserializar?
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.
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?
qual é o erro?
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.
Provavelmente vai ter que converter para DateTime também.
Tentei deserealizar dessa outra forma, porém também não deu certo:
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"}