2
respostas

[Dúvida] Dúvida quanto aos exercícos 1 e 2.

No código do instrutor, ele atribui os valores às propriedades e depois usa o JsonSerializer() dentro do Program Main().

Só que eu, ao invés disso, quis copiar o que a gente fez no projeto principal, que é criar um método dentro da classe que automaticamente já faz a serialização.

Então a classe ficou assim:

internal class Pessoa
{
    public string Nome { get; set; }
    public int Idade { get; set; }
    public string Email { get; set; }

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

    internal void ToJson()
    {
        string json = JsonSerializer.Serialize(new
        {
            nome = Nome, idade = Idade, email = Email
        });

        string fileName = $"Pessoa-Linda-{Nome}.json";

        File.WriteAllText(fileName, json);
        Console.WriteLine(Path.GetFullPath(fileName));


    }
}

E no meu Program Main() eu escrevi:

Pessoa pessoa = new("Pedro", 18, "PedroFarias@gmail.com");

pessoa.ToJson();

E isso de fato gerou um arquivo .json, só que aí, quando eu fui pro exercício 2, eu deserializei esse arquivo e usei o Console.WriteLine($"Nome: {pessoa.Nome}"); pra imprimir as propriedades no terminal, só que as strings estavam vazias a idade estava como 0.

Quando eu refiz o exercício 1, só que dessa vez usando o JsonSerializer() no Program Main(), ao invés de chamar o método ToString() que eu tinha criado ( ou seja, fazendo exatamente igual o instrutor fez no código de resolução dele ), eu consegui imprimir as propriedades no exercício 2 sem problemas.

Mas então, por que no projeto original eu consigo serializar tanto o objeto anonimo quanto as propriedades, mas nesse exercício eu não consigo, e sou obrigado a serializar só as propriedades, e ainda fora da classe?

2 respostas

Olá, o seu método pra serializar a classe parece correto, acredito que o json esteja sendo gerado vazio porque a classe está como internal, tenta mudar ela pra public. O JsonSerializer pode não estar conseguindo acessar as propriedades da classe internal.

Boa teoria, mas eu mudei pra publico, refiz tudo e, mesmo assim, a propriedade se encontra nula.