1
resposta

Faça como eu fiz: mais uma classe

Musica.cs

namespace ScreenSound.Modelos;
using System.Text.Json.Serialization;

public class Musica {

    [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("year")]
    public string? Ano {get;set;}

    public void ExibirDetalhesMusica() {
        Console.WriteLine();
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Nome da Música: {Nome}");
        Console.WriteLine($"Duração: {Duracao/1000} segundos");
        Console.WriteLine($"Gênero: {Genero}");
        Console.WriteLine($"Ano: {Ano}");
        Console.WriteLine();
    }
}

LinqFilter.cs

// ...

public static void FiltrarMusicasPorAno(List <Musica> musicas, string ano) {
        var listaMusicasAno = musicas.OrderBy(m => m.Nome).Where(m => m.Ano!.Equals(ano)).Distinct().ToList();
        listaMusicasAno.ForEach(m => Console.WriteLine($"{m.Nome}"));
    }

Nesse caso, o filtro estaria sendo feito utilizando strings, todavia, caso fosse requisitado que o ano fosse um inteiro, poderíamos traduzir diretamente o valor recebido da API.

Musica.cs

namespace ScreenSound.Modelos;
using System.Text.Json.Serialization;

public class Musica {

    [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("year")]
    public string? AnoString {get;set;}
    public int Ano => int.Parse(AnoString!);

    public void ExibirDetalhesMusica() {
        Console.WriteLine();
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Nome da Música: {Nome}");
        Console.WriteLine($"Duração: {Duracao/1000} segundos");
        Console.WriteLine($"Gênero: {Genero}");
        Console.WriteLine($"Ano: {Ano}");
        Console.WriteLine();
    }
}

LinqFilter.cs

public static void FiltrarMusicasPorAno(List <Musica> musicas, int ano) {
        var listaMusicasAno = musicas.OrderBy(m => m.Nome).Where(m => m.Ano == ano).Distinct().ToList();
        listaMusicasAno.ForEach(m => Console.WriteLine($"{m.Nome}"));
    }
1 resposta

Olá, Diego! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso do JsonPropertyName para mapear propriedades com C#, utilizou muito bem o LINQ para filtrar coleções e ainda compreendeu a importância do tipos fortes para garantir consistência nos dados.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Sugestão de conteúdo para você mergulhar ainda mais no tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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