Introdução
JSON (JavaScript Object Notation) é um formato leve de troca de dados que se tornou o padrão de facto para comunicação entre servidor e cliente, bem como para armazenamento de configurações. No ecossistema C# (.NET), o trabalho com JSON é implementado no mais alto nível: o desenvolvedor tem acesso tanto a bibliotecas integradas quanto a poderosas soluções de terceiros. Neste artigo, com exemplos práticos, vamos analisar como realizar parsing, serialização e desserialização de JSON em C#, utilizando abordagens modernas.
Vamos abordar duas ferramentas principais: System.Text.Json (biblioteca integrada a partir do .NET Core 3.0+) e Newtonsoft.Json (biblioteca popular de terceiros). Você aprenderá como converter objetos C# para JSON e vice-versa, como trabalhar com estruturas aninhadas e como tratar erros.
Fundamentos de serialização e desserialização em C#
Antes de nos aprofundarmos no código, vamos definir os termos. Serialização é o processo de converter um objeto C# (por exemplo, uma instância de uma classe) em uma string JSON. Desserialização é o processo inverso: a partir de uma string JSON, reconstruímos um objeto C#. Em C#, são usados atributos e classes serializadoras especiais para isso.
1. Trabalhando com System.Text.Json (biblioteca integrada)
A partir do .NET Core 3.0, a Microsoft apresentou sua própria biblioteca para trabalhar com JSON — System.Text.Json. Ela é mais rápida que o Newtonsoft.Json e não requer a instalação de pacotes adicionais.
Vamos considerar uma classe simples Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}Serialização para JSON:
using System.Text.Json;
var person = new Person{ Name = "Alexei", Age = 30, Email = "alex@example.com"};
string json = JsonSerializer.Serialize(person);Console.WriteLine(json);// Saída: {"Name":"Alexei","Age":30,"Email":"alex@example.com"}Desserialização a partir de JSON:
string jsonString = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@example.com""}";Person? person = JsonSerializer.Deserialize<Person>(jsonString);Console.WriteLine(person?.Name); // MariaObserve o operador ? (nullable) — a desserialização pode retornar null em caso de erro.
2. Trabalhando com Newtonsoft.Json (Json.NET)
Apesar do surgimento do System.Text.Json, o Newtonsoft.Json continua sendo uma escolha popular devido à sua flexibilidade e amplas possibilidades de configuração. Para usá-lo, instale o pacote NuGet Newtonsoft.Json.
Exemplo com a mesma classe Person:
using Newtonsoft.Json;
// Serializaçãovar person = new Person { Name = "Ivan", Age = 35, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person);Console.WriteLine(json);
// Desserializaçãostring jsonInput = @"{'Name':'Olga','Age':28,'Email':'olga@example.com'}";Person? personDeserialized = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine(personDeserialized?.Name); // OlgaO Newtonsoft.Json, por padrão, suporta tanto aspas duplas quanto aspas simples, tornando-o mais tolerante a JSON "sujo".
Cenários avançados: trabalhando com objetos aninhados e coleções
Em projetos reais, o JSON raramente é plano. Vamos considerar um exemplo com dados aninhados.
Suponha que temos uma classe Company contendo uma lista de funcionários:
public class Employee{ public string Name { get; set; } public string Position { get; set; }}
public class Company{ public string CompanyName { get; set; } public List<Employee> Employees { get; set; }}Serialização (System.Text.Json):
Blogs
Book Recommendations
Leia também
Código limpo em Kotlin: regras que economizarão seus nervos
Implantação de aplicação PHP em VPS: guia passo a passo do início ao fim
Símbolos PHP: guia de sintaxe para iniciantes e profissionais
Programação Funcional em Swift: Fundamentos e Exemplos
Trabalho com arquivos e sistema de arquivos em Kotlin: do iniciante ao profissional