1
resposta

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

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; }
}

var pessoas = new List<Pessoa>();

while( true)
{
    Console.Write("Digite o nome (ou 'sair' para encerrar): ");
    string nome = Console.ReadLine()!;
    if (nome.Equals("sair"))
    {
        break;
    }
    Console.Write("Digite a idade: ");
    int idade  = int.Parse(Console.ReadLine()!);
    Console.Write("Digite o e-mail: ");
    string email = Console.ReadLine()!;
    pessoas.Add(new Pessoa(nome, idade, email));
}



string jsonString = JsonSerializer.Serialize(pessoas);

string fileName = "pessoas.json";

File.WriteAllText(fileName, jsonString);

Console.WriteLine($"Os dados foram salvos em {fileName}");
1 resposta

Olá, Eduardo. Como vai?

Excelente evolução no desafio! Você subiu o nível do projeto ao implementar uma lista de objetos e uma estrutura de repetição while(true) com uma condição de parada clara. Essa é a base para criar sistemas que processam múltiplos registros de uma só vez, o que é muito comum no dia a dia do desenvolvimento.

O ponto principal aqui é que, ao serializar a List<Pessoa>, o seu arquivo JSON passará a ter uma estrutura de array (colchetes []), permitindo armazenar quantos usuários você desejar.

Para tornar seu código ainda mais profissional e evitar que ele pare de funcionar por erros de digitação, deixo algumas sugestões:

  • Assim como nos tópicos anteriores, o uso do int.TryParse é altamente recomendado para evitar que o programa quebre se o usuário digitar algo que não seja um número na idade.
  • Adicione o using System.Text.Json; para garantir que o serializador seja reconhecido.
  • Como você está trabalhando com uma lista, pode ser interessante usar o JsonSerializerOptions para deixar o arquivo gerado mais legível.

Veja como o trecho da lógica principal poderia ser refinado:

var pessoas = new List<Pessoa>();

while (true)
{
    Console.Write("Digite o nome (ou 'sair' para encerrar): ");
    string nome = Console.ReadLine()!;
    
    if (nome.Trim().ToLower().Equals("sair"))
    {
        break;
    }

    Console.Write("Digite a idade: ");
    if (!int.TryParse(Console.ReadLine(), out int idade))
    {
        Console.WriteLine("Idade inválida! Digite um número.");
        continue; // Volta para o início do loop
    }

    Console.Write("Digite o e-mail: ");
    string email = Console.ReadLine()!;

    pessoas.Add(new Pessoa(nome, idade, email));
}

// Configuração para o JSON ficar organizado
var opcoes = new JsonSerializerOptions { WriteIndented = true };
string jsonString = JsonSerializer.Serialize(pessoas, opcoes);

string fileName = "pessoas.json";
File.WriteAllText(fileName, jsonString);

Console.WriteLine($"\nSucesso! {pessoas.Count} pessoas foram salvas em {fileName}");
  • O uso do nome.Trim().ToLower() na verificação do "sair" evita que espaços extras ou letras maiúsculas impeçam o encerramento do programa.
  • O pessoas.Count no final dá um feedback bem legal para o usuário sobre quantos registros foram processados.

Parabéns por dominar a manipulação de listas e a persistência de dados em arquivos!

Espero que possa ter lhe ajudado!