none
Windows Phone consumindo JSON RRS feed

  • Pergunta

  • Pessoal, estou criando uma aplicação que puxa iformações de um Json, sendo que estou tendo problemas na hora de transformar o Json em um Objeto no C#.
    Como nunca tive necessidade de usar o Json, estou tendo dificuldades e gostaria da ajuda de vocês. 


    O retorno do meu Json é este
    {"conteudos":[{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/liberados-para-preparacao-fisica-gum-e-digao-so-voltam-em-2012.html","primeira_publicacao":"November 29, 2011 19:05:02","site":"globoesporte","subtitulo":"Em fase final de recupera\u00e7\u00e3o de les\u00f5es nas coxas, zagueiros deram voltas ao redor do gramado das Laranjeiras nesta ter\u00e7a-feira","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/29/gum-e-digao_edgardmaciel1024.jpg","titulo":"Liberados para a prepara\u00e7\u00e3o f\u00edsica, Gum e Dig\u00e3o s\u00f3 voltam em 2012","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/em-dia-de-treinamento-de-reservas-gamba-rouba-cena-nas-laranjeiras.html","primeira_publicacao":"November 29, 2011 16:58:50","site":"globoesporte","subtitulo":"Animal acompanhou toda a atividade da arquibancada do clube. Titulares s\u00f3 voltam a treinar nesta quarta-feira","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/29/gamba-laranjeiras-gcom-2.jpg","titulo":"Em dia de treinamento de reservas, gamb\u00e1 rouba a cena nas Laranjeiras","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/de-ferias-conca-desembarca-no-rio-e-ira-visitar-laranjeiras-em-breve.html","primeira_publicacao":"November 29, 2011 16:15:03","site":"globoesporte","subtitulo":"Campe\u00e3o nacional pelo Guangzhou Evergrande-CHI, \u00eddolo da torcida tricolor deve rever seus ex-companheiros de Fluminense at\u00e9 o fim desta semana","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/08/06/conca_paulao_guanghoz02_div.jpg","titulo":"De f\u00e9rias, Conca desembarca no Rio \ne ir\u00e1 visitar as Laranjeiras em breve","ultima_atualizacao":null},{"editoria_principal":"redacao sportv","editorias":[],"permalink":"http://globoesporte.globo.com/sportv/programas/redacao-sportv/noticia/2011/11/classicos-decisivos-roubam-rivalidade-dos-estaduais-diz-jornalista.html","primeira_publicacao":"November 29, 2011 14:05:36","site":"globoesporte","subtitulo":"Editor de 'O Globo', Toninho Nascimento cita exemplo de Atl\u00e9tico-MG x Cruzeiro, no qual Galo pode rebaixar o rival na \u00faltima rodada do Brasileir\u00e3o","thumbnail":null,"titulo":"'Cl\u00e1ssicos decisivos roubam rivalidade dos Estaduais', diz jornalista ","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/flu-define-local-da-pre-temporada-de-2012-e-pensa-em-reforcos-pontuais.html","primeira_publicacao":"November 29, 2011 11:13:54","site":"globoesporte","subtitulo":"Tricolor deixa praticamente fechada a prepara\u00e7\u00e3o em Mangaratiba e come\u00e7a a tocar a reformula\u00e7\u00e3o de seu elenco visando o Carioca e a Libertadores","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/09/11/ciro_pho62.jpg","titulo":"Flu define local da pr\u00e9-temporada de 2012 e pensa em 'refor\u00e7os pontuais'","ultima_atualizacao":null},{"editoria_principal":"brasileir\u00e3o s\u00e9rie a","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/brasileirao-serie-a/noticia/2011/11/armandao-fred-fica-uma-boa-atuacao-de-ser-o-craque-do-brasileiro.html","primeira_publicacao":"November 29, 2011 08:15:02","site":"globoesporte","subtitulo":"Diferen\u00e7a entre o atacante do Flu e o l\u00edder Neymar cai para 0,03 ponto. Joia do Santos folga na \u00faltima rodada e abre caminho para o tricolor","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/29/armandao_rodada37_4.png","titulo":"Armand\u00e3o: Fred fica a uma boa atua\u00e7\u00e3o de ser o craque do Brasileiro","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/peter-siemsen-elogia-trabalho-de-abel-e-afirma-valeu-pena-espera-lo.html","primeira_publicacao":"November 29, 2011 08:05:02","site":"globoesporte","subtitulo":"Presidente Tricolor, que esperou pelo treinador durante quase tr\u00eas meses, diz entender que, hoje, o time tem cara e estrutura t\u00e1tica","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/25/abelbraga_treino_pho_60.jpg","titulo":"Peter Siemsen elogia trabalho de Abel e afirma: \u2018Valeu a pena esper\u00e1-lo\u2019","ultima_atualizacao":null},{"editoria_principal":"futebol","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/noticia/2011/11/clubes-brasileiros-ampliam-presenca-na-soccerex-em-busca-de-visibilidade.html","primeira_publicacao":"November 28, 2011 20:57:41","site":"globoesporte","subtitulo":"Na primeira edi\u00e7\u00e3o, em 2010, apenas Santos e Bota marcaram presen\u00e7a. Neste ano, j\u00e1 s\u00e3o sete clubes de olho em parcerias para crescer receitas ","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/28/standcruzeiro-raulplassman-soccerex_andrecasado1024.jpg","titulo":"Clubes brasileiros ampliam presen\u00e7a\nna Soccerex em busca de visibilidade","ultima_atualizacao":null},{"editoria_principal":"botafogo","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/botafogo/noticia/2011/11/wagner-sai-dos-planos-do-bota.html","primeira_publicacao":"November 28, 2011 20:28:54","site":"globoesporte","subtitulo":"Clube faz sondagem ao jogador, mas n\u00e3o evolui nas negocia\u00e7\u00f5es","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/09/wagner_lokomotiv_get62.jpg","titulo":"Wagner sai dos planos do Bota","ultima_atualizacao":null},{"editoria_principal":"brasileir\u00e3o s\u00e9rie a","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/brasileirao-serie-a/noticia/2011/11/desempenho-no-segundo-turno-faz-fred-colar-em-borges-na-artilharia.html","primeira_publicacao":"November 28, 2011 20:15:26","site":"globoesporte","subtitulo":"Com m\u00e9dia de 1,3 gol por jogo ap\u00f3s virada do turno, atacante tricolor fica a apenas dois tentos do santista, que n\u00e3o disputar\u00e1 a \u00faltima rodada","thumbnail":null,"titulo":"Desempenho no segundo turno faz Fred colar em Borges na artilharia","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/se-nao-vencer-o-bota-flu-alcancara-historica-marca-negativa.html","primeira_publicacao":"November 28, 2011 19:05:34","site":"globoesporte","subtitulo":"Desde a profissionaliza\u00e7\u00e3o do futebol no clube, em 1933, o Tricolor nunca passou uma temporada inteira sem vencer um cl\u00e1ssico contra seus rivais","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/11/27/fred_aldur.jpg","titulo":"Se n\u00e3o vencer o Bota, Fluminense alcan\u00e7ar\u00e1 hist\u00f3rica marca negativa","ultima_atualizacao":null},{"editoria_principal":"sportv","editorias":[],"permalink":"http://globoesporte.globo.com/sportv/noticia/2011/11/sub-15-brasil-derrota-argentina-na-estreia-do-quadrangular-final.html","primeira_publicacao":"November 28, 2011 18:14:04","site":"globoesporte","subtitulo":"Ap\u00f3s segundo tempo movimentado, brasileiros conseguem derrotar rivais argentinos no primeiro jogo do quadrangular de encerramento do torneio","thumbnail":null,"titulo":"Brasil vence Argentina na abertura da fase final do Sul-Americano Sub-15","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/flu-e-o-time-que-menos-empatou-na-historia-dos-pontos-corridos.html","primeira_publicacao":"November 28, 2011 16:45:02","site":"globoesporte","subtitulo":"Campanha de 2011 supera a do Cruzeiro de 2008. Presidente do clube torce para que disputas por t\u00edtulos continuem constantes nas Laranjeiras","thumbnail":"http://s.glbimg.com/es/ge/f/90x68/2011/08/21/rafaelmoura.jpg","titulo":"Flu \u00e9 o time que menos empatou na hist\u00f3ria dos pontos corridos","ultima_atualizacao":null},{"editoria_principal":"redacao sportv","editorias":[],"permalink":"http://globoesporte.globo.com/sportv/programas/redacao-sportv/noticia/2011/11/para-sergio-xavier-classicos-na-ultima-rodada-turbinaram-campeonato.html","primeira_publicacao":"November 28, 2011 14:27:03","site":"globoesporte","subtitulo":"Diretor da revista Placar diz que sistema de enfrentamento regional \u00e9 um gola\u00e7o; Garambone lamenta cl\u00e1ssicos com apenas uma torcida","thumbnail":null,"titulo":"Para S\u00e9rgio Xavier, classicos na \u00faltima rodada turbinaram campeonato","ultima_atualizacao":null},{"editoria_principal":"fluminense","editorias":[],"permalink":"http://globoesporte.globo.com/futebol/times/fluminense/noticia/2011/11/fluminense-ganha-direito-de-voltar-ao-ato-trabalhista.html","primeira_publicacao":"November 28, 2011 13:58:35","site":"globoesporte","subtitulo":"Com a senten\u00e7a da Justi\u00e7a do Trabalho, Peter Siemsen espera equilibrar as contas do clube com diminui\u00e7\u00e3o de gastos. Time n\u00e3o ser\u00e1 afetado ","thumbnail":null,"titulo":"Fluminense ganha direito de voltar ao ato-trabalhista","ultima_atualizacao":null}],"itemInicial":0,"itensObtidos":15,"itensPorPagina":15,"paginaAtual":1,"totalItens":60,"totalPaginas":4}

    public partial class MainPage : PhoneApplicationPage
        {
            // Constructor
            public MainPage()
            {
                InitializeComponent();
    
                ObterResultadoDoTime("fluminense");
    
                
              
            }
    
            private void ObterResultadoDoTime(string time = "fluminense")
            {
                string url = @"http://wwwwwwww.JSON/1.json";
    
                System.Uri targetUri = new System.Uri(url);
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
                request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; MANUFACTURER; DEVICE)";
                request.Headers["Cookie"] = "security=true";
                request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    
            }
    
            private void ReadWebRequestCallback(IAsyncResult callbackResult)
            {
                HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
                HttpWebResponse myResponse = null;
                try
                {
                    myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);
    
                    //Dispatcher.BeginInvoke(() => btnResultadoProximo.IsEnabled = true);
                }
                catch
                {
                    Dispatcher.BeginInvoke(() => MessageBox.Show("Problemas com a internet ou serviço fora do ar. Tente novamente mais tarde."));
                    return;
                }
    
                string HTML = "";
                using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8))
                {
                    HTML = httpwebStreamReader.ReadToEnd();
    
                    List<Futebol> lista = (List<Futebol>)Deserialize(myResponse.GetResponseStream(), typeof(Noticia));
    
                }
                myResponse.Close();
    
                
                // serialization
                //MemoryStream ms = new MemoryStream();
                //DataContractJSONSerializationHelper.Serialize(ms, new SampleData());
    
                //ms.Position = 0;
                //// deserialization
                //var sampleData = DataContractJSONSerializationHelper.Deserialize(ms, typeof(SampleData));
    
                //ms.Close();
    
    
            }
    
            private void ExibirResultado(string HTML)
            {
                throw new NotImplementedException();
            }
    
            public static void Serialize(Stream streamObject, object objForSerialization)
            {
                if (objForSerialization == null || streamObject == null)
                    return;
    
                DataContractJsonSerializer ser = new DataContractJsonSerializer(objForSerialization.GetType());
                ser.WriteObject(streamObject, objForSerialization);
            }
    
            public static object Deserialize(Stream streamObject, Type serializedObjectType)
            {
                if (serializedObjectType == null || streamObject == null)
                    return null;
    
                DataContractJsonSerializer ser = new DataContractJsonSerializer(serializedObjectType);
                return ser.ReadObject(streamObject);
            }
          
        }
    
        //[DataContractAttribute]
        //public class Futebol
        //{
        //    [DataMember]
        //    public string ContentText { get; set; }
    
        //    [DataMember]
        //    public List<int> SomeItems { get; set; }
    
        //    public Futebol()
        //    {
        //        ContentText = "some text";
        //        SomeItems = new List<int>() { 1, 2, 3 };
        //    }
        //}
    
        [DataContractAttribute]
        public class Noticia
        {
            public List<Futebol> conteudos { get; set; }
        }
        [DataContractAttribute]
        public class Futebol
        {
            [DataMember]
            public string editoria_principal { get; set; }
            [DataMember]
            public string permalink { get; set; }
            [DataMember]
            public string primeira_publicacao { get; set; }
            [DataMember]
            public string site { get; set; }
            [DataMember]
            public string subtitulo { get; set; }
            [DataMember]
            public string thumbnail { get; set; }
            [DataMember]
            public string titulo { get; set; }
            [DataMember]
            public string ultima_atualizacao { get; set; }
            
        }
    

    Gostaria de saber onde estou errando. O problema é na classe que criei logo abaixo ou na hora de Deserializar o objeto?

     

    Desde já agradeço pela coloboração
     

    terça-feira, 29 de novembro de 2011 23:25

Respostas

Todas as Respostas

  • Consegui resolver pessoal o problema estava aqui
    using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8))
                {
                    HTML = httpwebStreamReader.ReadToEnd();
    
                    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(HTML));
    
                    Noticia lista = (Noticia)Deserialize(ms, typeof(Noticia));
                    ms.Close();
                }
                myResponse.Close();
    

     
     public class Noticia
        {
            [DataMember]
            public List<Futebol> conteudos { get; set; }
        }
    

    terça-feira, 29 de novembro de 2011 23:39
  • Caro Paulo, este é um daqueles casos em que aconselho a fazer de ovelha e ir com o resto do rebanho: utiliza o RestSharp e o JSON.net (ambos disponíveis por NuGet) e acredita que vais poupar muitas dores de cabeça... ;)
    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    quarta-feira, 30 de novembro de 2011 11:23
  • Vou dar uma olhada depois, pois tive muita dor de cabeça pra fazer o que eu queria.
    quarta-feira, 30 de novembro de 2011 13:19