1
resposta

[Projeto] Resolução Desafio 1

Musica.cs

using System.Text.Json.Serialization;

namespace ScreenSoundAPI.Modelos;

internal class Musica
{
    private string[] tonalidades = { "C", "C#", "D", "Eb", "E", "F", "F#", "G", "Ab", "A", "Bb", "B" };

    [JsonPropertyName("song")]
    public string? Nome { get; set; }
    [JsonPropertyName("artist")]
    public string? Artista { get; set; }

    [JsonPropertyName("duration_ms")]
    public int Duracao { get; set; }
    [JsonPropertyName("genre")]
    public string? Genero { get; set; }

    [JsonPropertyName("key")]
    public int Key { get; set; }

    public string Tonalidade
    {
        get
        {
            if (Key >= 0 && Key < tonalidades.Length)
                return tonalidades[Key];
            else
                return "Desconhecido";
        }
    }
    public void ExibirDetalhesDaMusica()
    {
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Música: {Nome}");
        Console.WriteLine($"Duração em segundos: {Duracao / 1000}");
        Console.WriteLine($"Gênero musical: {Genero}");
        Console.WriteLine($"Tonalidade: {Tonalidade}");
    }
}

Program.cs

using ScreenSoundAPI.Filtros;
using ScreenSoundAPI.Modelos;
using System.Text.Json;

using (HttpClient client = new HttpClient())
{
    try
    {
        string resposta = await client.GetStringAsync("https://guilhermeonrails.github.io/api-csharp-songs/songs.json");
        var musicas = JsonSerializer.Deserialize<List<Musica>>(resposta)!;
        foreach (var musica in musicas)
        {
            musica.ExibirDetalhesDaMusica();
            Console.WriteLine("-------------------");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Temos um problema: {ex.Message}");
    }
}
1 resposta

Oi, Matheus.

Agradeço por compartilhar seu código com a comunidade Alura.

Ficou bem interessante a forma como você tratou a propriedade Tonalidade, usando um array e validando o índice com base no Key. Isso mostra um bom cuidado com possíveis erros e deixa o código mais seguro. Outro ponto legal foi o uso do HttpClient com desserialização direta, deixando o fluxo bem organizado.

Você pode usar o método Select do LINQ para transformar dados antes de exibir.


var nomes = musicas.Select(m => m.Nome);
foreach (var nome in nomes)
{
    Console.WriteLine(nome);
}

Nesse código, usamos Select para pegar apenas o nome das musicas e depois exibimos, deixando o código mais limpo e focado no que queremos mostrar.

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