Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio: hora da prática - Atividade 04 e Atividade 05

Atividade 10.4

Para resolver esse problema, foi um pouco mais difícil, já que eu só notei depois que não poderia desserializar com <List<Usuario>>, e sim que teria que criar uma classe externa para representar a lista de usuários a ser desserializada.

Usei esse post de auxílio: https://stackoverflow.com/questions/68275097/the-json-value-could-not-be-converted-to-system-collections-generic-list

Program.cs

using System.Text.Json;

string nomeArquivo = "infos";
string textoArquivo = File.ReadAllText(nomeArquivo);

var listaInformacoes = JsonSerializer.Deserialize<ListaUsuarios>(textoArquivo);
listaInformacoes!.listaUsuarios!.ForEach(u => Console.WriteLine($"{u.Nome} - {u.Email} - {u.Idade}"));

Usuario.cs

using System.Text.Json.Serialization;

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, string? email) {
        Nome = nome;
        Idade = idade;
        Email = email;
    }

    public void ExibirInformacoes() {
        Console.WriteLine();
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Email: {Email}");
        Console.WriteLine($"Idade: {Idade}");
        Console.WriteLine();
    }
}

ListaUsuarios.cs

using System.Text.Json.Serialization;

class ListaUsuarios {
    public List<Usuario>? listaUsuarios {get;set;}
}

Atividade 10.5

Program.cs

using System.Text.Json;

Console.Clear();
string nomeArquivo = "infos";
string textoArquivo = File.ReadAllText(nomeArquivo);

var listaInformacoes = JsonSerializer.Deserialize<ListaUsuarios>(textoArquivo);

Console.Write("Insira a idade: ");
int idade; int.TryParse(Console.ReadLine()!, out idade);

listaInformacoes!.listaUsuarios = listaInformacoes!.listaUsuarios!.Where(u => u.Idade == idade).ToList();
listaInformacoes!.listaUsuarios!.ForEach(u => Console.WriteLine($"{u.Nome} - {u.Email} - {u.Idade}"));

ListaUsuarios.cs

using System.Text.Json.Serialization;

class ListaUsuarios {
    
    public List<Usuario>? listaUsuarios {get;set;}
}

Usuario.cs

using System.Text.Json.Serialization;

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, string? email) {
        Nome = nome;
        Idade = idade;
        Email = email;
    }

    public void ExibirInformacoes() {
        Console.WriteLine();
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Email: {Email}");
        Console.WriteLine($"Idade: {Idade}");
        Console.WriteLine();
    }
}
1 resposta
solução!

Oi, Diego! Como vai?

Agradeço por compartilhar.

Gostei da sua análise, importante quando você percebeu que precisava de uma classe intermediária para representar o JSON corretamente. Isso mostra uma boa leitura da estrutura dos dados e entendimento de como a desserialização funciona no C#. Também ficou bem organizado o uso do LINQ na filtragem por idade, deixando o código mais direto e legível.

Continue nesse caminho, explorando diferentes formatos de JSON e tentando adaptar suas classes para cada cenário. Isso fortalece bastante sua base.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!