1
resposta

[Projeto] [Projeto] Desafio: hora da prática 4

class Pessoa
{
    public Pessoa(string nome, int idade, string email)
    {
        Nome = nome;
        Idade = idade;
        Email = email;
    }

    public string Nome { get; private set; }
    public int Idade { get; private set; }
    public string Email { get; private set; }
}

string fileName = "pessoas.json";

if (File.Exists(fileName))
{
    string jsonString = File.ReadAllText(fileName);

    var pessoas = JsonSerializer.Deserialize<List<Pessoa>>(jsonString);

    foreach (var pessoa in pessoas)
    {
        Console.WriteLine($"Nome: {pessoa.Nome}");
        Console.WriteLine($"Idade: {pessoa.Idade}");
        Console.WriteLine($"E-mail: {pessoa.Email}");
    }
}
else
{
    Console.WriteLine($"O arquivo {fileName} não existe.");
}
1 resposta

Olá, Eduardo. Como vai?

Parabéns por concluir essa sequência de desafios! Você fechou o ciclo de persistência de dados de forma excelente, implementando a leitura e a iteração sobre uma lista de objetos desserializados de um arquivo JSON. Essa habilidade de transformar uma string bruta em uma coleção de objetos manipuláveis no C# é essencial para qualquer desenvolvedor que trabalhe com integração de sistemas e APIs.

O uso do foreach para percorrer a lista pessoas está perfeito e demonstra uma boa compreensão de como lidar com coleções após a leitura do disco.

Para elevar ainda mais a qualidade técnica do seu projeto, deixo algumas sugestões:

  • Tratamento de Nulos: Como a desserialização pode retornar uma lista vazia ou nula (caso o arquivo esteja mal formatado), é uma boa prática usar o operador de interrogação ou verificar se a variável é nula antes de iniciar o foreach.
  • LINQ para Filtros: Já que o curso aborda LINQ, você poderia aproveitar para ordenar a lista ou filtrar os dados antes de exibi-los.
  • Organização Visual: Adicionar um separador visual entre os dados de cada pessoa ajuda muito na leitura do console.

Veja como o seu código poderia ficar com essas pequenas melhorias:

string fileName = "pessoas.json";

if (File.Exists(fileName))
{
    string jsonString = File.ReadAllText(fileName);
    
    // O tipo List<Pessoa>? indica que a lista pode vir nula
    var pessoas = JsonSerializer.Deserialize<List<Pessoa>>(jsonString);

    if (pessoas != null && pessoas.Any())
    {
        Console.WriteLine($"--- Exibindo {pessoas.Count} pessoas encontradas ---\n");

        foreach (var pessoa in pessoas)
        {
            Console.WriteLine($"Nome: {pessoa.Nome}");
            Console.WriteLine($"Idade: {pessoa.Idade}");
            Console.WriteLine($"E-mail: {pessoa.Email}");
            Console.WriteLine(new string('-', 30)); // Linha separadora
        }
    }
    else
    {
        Console.WriteLine("O arquivo está vazio ou em formato inválido.");
    }
}
else
{
    Console.WriteLine($"O arquivo {fileName} não existe.");
}
  • O método Any() do LINQ é uma forma elegante de verificar se a lista contém elementos antes de entrar no laço de repetição.
  • O uso de new string('-', 30) é um truque simples para criar divisores visuais sem precisar digitar vários hífens manualmente.

Você demonstrou um ótimo domínio sobre a manipulação de arquivos e JSON nesta jornada. Continue praticando!

Espero que possa ter lhe ajudado!