Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Desafio: Hora da prática - Atividade 1

Resolução:
Program.cs

using DesafiosCSharp03._02Desafio.Modelos;
using System.Text.Json;

using (HttpClient client = new HttpClient())
{
    try
    {
        string resposta = await client.GetStringAsync("https://raw.githubusercontent.com/ArthurOcFernandes/Exerc-cios-C-/curso-4-aula-2/Jsons/TopMovies.json");

        var filmes = JsonSerializer.Deserialize<List<Filme>>(resposta)!;
        foreach (var filme in filmes)
        {
            filme.ExibirInformacoes();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Ocorreu um erro ao obter os dados: {ex.Message}");
    }
}

Filme.cs

using System.Text.Json.Serialization;

namespace DesafiosCSharp03._02Desafio.Modelos
{
    internal class Filme
    {
        [JsonPropertyName("rank")]
        public string? Rank { get; set; }
        [JsonPropertyName("title")]
        public string? Nome { get; set; }
        [JsonPropertyName("year")]
        public string? Ano { get; set; }
        [JsonPropertyName("crew")]
        public string? Elenco { get; set; }
        [JsonPropertyName("imDbRating")]
        public string? Avaliacao { get; set; }
        [JsonPropertyName("imDbRatingCount")]
        public string? ContagemAvaliacoes { get; set; }

        public void ExibirInformacoes()
        {
            Console.WriteLine($"Rank: {Rank}");
            Console.WriteLine($"Título: {Nome}");
            Console.WriteLine($"Ano: {Ano}");
            Console.WriteLine($"Avaliação: {Avaliacao}");
            Console.WriteLine($"Contagem de Avaliações: {ContagemAvaliacoes}");
            Console.WriteLine(new string('-', 30));
        }
    }
}
1 resposta

Olá, Christopher! Como vai?

Gostei da forma como você organizou a solução, separando a classe Filme do Program.cs e utilizando os atributos JsonPropertyName para mapear corretamente os dados recebidos da API. Também foi uma boa prática utilizar o bloco try/catch para tratar possíveis falhas na requisição e evitar que a aplicação seja interrompida inesperadamente.

Uma dica interessante para o futuro é utilizar o método OrderBy() do LINQ para ordenar os filmes antes da exibição. Veja este exemplo:


var filmesOrdenados = filmes.OrderBy(f => f.Nome);

foreach (var filme in filmesOrdenados)
{
filme.ExibirInformacoes();
}

Esse código organiza os filmes em ordem alfabética pelo nome antes de exibi-los no console, o que pode facilitar a visualização dos dados.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!