1
resposta

[Dúvida] Resolução Desafio na Pratica: Criando Arquivos com C#

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

    }
}
1 resposta

Oi, Cristhyan, tudo bem?

Parabéns por compartilhar sua solução para os desafios! Além disso, obrigado por compartilhar no fórum e contribuir com a comunidade.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!