Bom dia,
Compartilho abaixo minha resolução para os desafios da aula 4. Criando Arquivos com C# Por gentileza poderia validar se essa resolução está dentro do espero e quais melhorias poderiam ser feitas no codigo?
Arquivo Program.cs:
using DesafioNaPraticaArquivoJson.Modelos;
//Desafio 1 : Criar um programa que permite ao usuário inserir informações de uma pessoa (nome, idade, e e-mail) Usuario teste = new("Cris",27); teste.AddEmail("cristhyan.alves1@gmail.com"); Usuario teste1 = new("Teste", 29);
// Desafio 1: serializa essas informações em formato JSON e salva em um arquivo.
SalvaArquivoJson saveFile = new();
saveFile.AddUsuarios(teste);
saveFile.AddUsuarios(teste1);
string arquivSalvo = saveFile.GerarArquivoJson();
Console.WriteLine(arquivSalvo);
// Desafio 2: Criar um programa que lê um arquivo JSON contendo informações de uma pessoa, desserializa essas informações e exibe na tela.
var usuarios = LeitorArquivoJson.LerArquivoLocal(arquivSalvo);
// Desafio 3 e 4 feito nas classes SalvaArquivoJson e Usuario
// Desafio 5: Criar um programa que lê um arquivo JSON contendo informações de várias pessoas, permite ao usuário inserir uma idade e exibe as pessoas com aquela idade.
FilterIdade.FiltrarUsuariosPorIdade(usuarios);
Classe Usuario:
using System.Text.Json.Serialization;
namespace DesafioNaPraticaArquivoJson.Modelos;
internal class Usuario
{
[JsonPropertyName("Nome")]
public string Nome { get; set; }
[JsonPropertyName("Idade")]
public int Idade { get; set; }
[JsonPropertyName("Email")]
public string? Email { get; set; }
public Usuario (string nome, int idade)
{
if (string.IsNullOrWhiteSpace(nome))
throw new ArgumentException("Nome não pode ser vazio ou nulo.", nameof(nome));
if (idade <= 0)
throw new ArgumentException("Idade deve ser um valor positivo.", nameof(idade));
Nome = nome;
Idade = idade;
}
public void ExibirUsuario()
{
Console.WriteLine($"Usuário:{Nome} , Idade: {Idade}, e-mail: {Email}");
}
public void AddEmail(string email)
{
Email = email;
}
}
Classe: SalvaArquivoJson:
using System.Text.Json;
using DesafioNaPraticaArquivoJson.Modelos;
namespace DesafioNaPraticaArquivoJson.Modelos;
internal class SalvaArquivoJson
{
public List<Usuario> ListaUsuarios { get; }
public SalvaArquivoJson()
{
ListaUsuarios = new List<Usuario>();
}
public void AddUsuarios(Usuario usuario)
{
ListaUsuarios.Add(usuario);
}
public string GerarArquivoJson()
{
string json = JsonSerializer.Serialize(new
{
usuario = ListaUsuarios,
});
string nomeDoArquivo = $"usuarios.json";
File.WriteAllText(nomeDoArquivo, json);
string path = Path.GetFullPath(nomeDoArquivo);
Console.WriteLine($"Arquivo criado com sucesso! - salvo em: {path}");
return path;
}
}
Classe LeitorArquivoJson
namespace DesafioNaPraticaArquivoJson.Modelos;
internal class LeitorArquivoJson
{
public static List<Usuario> LerArquivoLocal(string caminhoArquivo)
{
string conteudo = File.ReadAllText(caminhoArquivo);
var opcoes = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
// Deserializa o conteúdo JSON para os objetos apropriados
var usuarios = JsonSerializer.Deserialize<Dictionary<string, List<Usuario>>>(conteudo, opcoes)!;
// Acessando os dados dentro do array 'usuario'
List<Usuario> listaUsuario = usuarios["usuario"];
foreach (var usuario in listaUsuario)
{
usuario.ExibirUsuario();
}
return listaUsuario;
}
}
Classe Filtro Idade:
namespace DesafioNaPraticaArquivoJson.Modelos;
internal class FilterIdade
{
public static void FiltrarUsuariosPorIdade(List<Usuario> usuario)
{
// permite ao usuário inserir uma idade
Console.WriteLine("Digite a Idade que deseja Filtrar:");
int idade = int.Parse(Console.ReadLine()!);
// Filtra as idades correspondentes
Func<Usuario, bool> propriedadeWhere = usuario => usuario.Idade == idade;
List<Usuario> lista = usuario.Where(propriedadeWhere).Distinct().ToList();
// Exibe idades:
Console.WriteLine("Usuários Selecionados: ");
foreach(Usuario user in lista)
{
user.ExibirUsuario();
}
}
}