Trabalhando com JSON em C#: parsing e serialização para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao trabalho com JSON em C#

\n\n

JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em desenvolvimento web, aplicativos móveis e microsserviços. Para um desenvolvedor C#, saber trabalhar com JSON é uma habilidade obrigatória. Neste artigo, abordaremos os fundamentos do parsing (desserialização) e da serialização de JSON usando o namespace moderno System.Text.Json, que faz parte do .NET Core 3.0 e superiores, bem como .NET 5/6/7/8.

\n\n

Veremos:

\n
    \n
  • O que são serialização e desserialização
  • \n
  • Como converter um objeto C# em uma string JSON
  • \n
  • Como ler JSON e transformá-lo de volta em um objeto
  • \n
  • Trabalho com objetos aninhados e coleções
  • \n
  • Tratamento de erros e configuração da serialização
  • \n
\n\n

Todos os exemplos de código foram escritos para um aplicativo de console C# (.NET 6+). Você pode copiá-los e executá-los imediatamente.

\n\n

1. Fundamentos da serialização: objeto → JSON

\n\n

Serialização é o processo de converter um objeto (ou estrutura de dados) em uma string no formato JSON. Em C#, usamos a classe JsonSerializer do namespace System.Text.Json.

\n\n

Criando um modelo simples

\n\n

Suponha que temos a classe Person:

\n\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public string Email { get; set; }\n}
\n\n

Serialização de um objeto

\n\n

Agora, vamos criar uma instância e convertê-la em JSON:

\n\n
using System.Text.Json;\n\nPerson person = new Person\n{\n    Name = "Ivan Petrov",\n    Age = 30,\n    Email = "ivan@example.com"\n};\n\nstring jsonString = JsonSerializer.Serialize(person);\nConsole.WriteLine(jsonString);
\n\n

Resultado:

\n\n
{"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}
\n\n

Por padrão, o JsonSerializer usa camelCase para nomes de propriedades (primeira letra minúscula), mas em nosso exemplo os nomes permaneceram com letra maiúscula, pois não alteramos as configurações. Se você precisar de camelCase estrito, use JsonSerializerOptions:

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\nstring jsonCamelCase = JsonSerializer.Serialize(person, options);\nConsole.WriteLine(jsonCamelCase);\n// {"name":"Ivan Petrov","age":30,"email":"ivan@example.com"}
\n\n

2. Desserialização: JSON → objeto

\n\n

Desserialização é o processo inverso: pegamos uma string JSON e a transformamos em um objeto C#.

\n\n

Exemplo simples de desserialização

\n\n

Suponha que recebemos um JSON de uma API:

\n\n
string jsonFromApi = @"{""Name"":""Anna Smirnova"",""Age"":25,""Email"":""anna@test.com""}";\n\nPerson? personFromJson = JsonSerializer.Deserialize<Person>(jsonFromApi);\n\nif (personFromJson != null)\n{\n    Console.WriteLine($"Nome: {personFromJson.Name}, Idade: {personFromJson.Age}");\n}
\n\n

Observe o sinal ? após o tipo Person — é uma anotação nullable, indicando que o resultado pode ser null (por exemplo, se o JSON for inválido).

\n\n

Trabalhando com arrays e listas

\n\n

Frequentemente, o JSON contém coleções de objetos. Suponha que temos um array de usuários:

\n\n
string jsonArray = @"\n[\n    {""Name"":""Oleg"",""Age"":35},\n    {""Name"":""Maria"",""Age"":28},\n    {""Name"":""Dmitri"",""Age"":42}\n]";\n\nList<Person>? people = JsonSerializer.Deserialize<List<Person>>(jsonArray);\n\nif (people != null)\n{\n    foreach (var p in people)\n    {\n        Console.WriteLine($"{p.Name} - {p.Age} anos");\n    }\n}
\n\n

3. Trabalhando com objetos aninhados e estruturas complexas

\n\n

Dados JSON reais raramente são planos. Vamos considerar

Blogs

Book Recommendations