Serialização e desserialização JSON no .NET – visão geral
O namespace System.Text.Json fornece funcionalidades para serializar e desserializar (ou fazer marshalling e unmarshalling) em JavaScript Object Notation (JSON). A Serialização é o processo de conversão do estado de um objeto, ou seja, os valores de suas propriedades, em um formulário que pode ser armazenado ou transmitido. O formulário serializado não inclui nenhuma informação sobre os métodos associados de um objeto. A desserialização reconstrói um objeto do formulário serializado.
O design da biblioteca System.Text.Json
enfatiza o alto desempenho e a baixa alocação de memória em um amplo conjunto de recursos. O suporte interno a UTF-8 otimiza o processo de leitura e gravação de texto JSON codificado como UTF-8, que é a codificação mais predominante para dados na Web e arquivos em disco.
A biblioteca também fornece classes para trabalhar com um DOM (modelo de objeto do documento) na memória. Esse recurso permite o acesso aleatório aos elementos em uma cadeia de caracteres ou arquivo JSON.
Para o Visual Basic, há algumas limitações em quais partes da biblioteca você pode usar. Para saber mais, confira Suporte para Visual Basic.
Como obter a biblioteca
A biblioteca é interna como parte da estrutura compartilhada para o .NET Core 3.0 e versões posteriores. O recurso de geração de origem é interno e faz parte da estrutura compartilhada do .NET 6 e versões posteriores.
Para versões de estrutura anteriores ao .NET Core 3.0, instale o pacote do NuGet System.Text.Json. O pacote é compatível com:
- .NET Standard 2.0 e posteriores
- .NET Framework 4.6.2 e versões posteriores
- .NET 8 e posterior
Namespaces e APIs
- O namespace System.Text.Json contém todos os pontos de entrada e os tipos principais.
- O namespace System.Text.Json.Serialization contém atributos e APIs para cenários avançados e personalização específicos para serialização e desserialização.
- O namespace System.Net.Http.Json contém métodos de extensão para serializar e desserializar cargas JSON a partir da rede.
Importante
System.Text.Json
não dá suporte às seguintes APIs de serialização que você pode ter usado anteriormente:
- Atributos do namespace System.Runtime.Serialization.
- O atributo System.SerializableAttribute e a interface ISerializable. Esses tipos são usados apenas para Serialização binária e XML.
Reflexão versus geração de origem
Por padrão, System.Text.Json
reúne os metadados necessários para acessar propriedades de objetos para serialização e desserialização em tempo de execução usando reflexão. Como alternativa, System.Text.Json
pode usar o recurso de geração de origem C# para melhorar o desempenho, reduzir o uso de memória privada e facilitar o corte do assembly, o que reduz o tamanho do aplicativo.
Para obter mais informações, confira Reflexão versus geração de origens.
Informações de segurança
Para informações sobre ameaças à segurança consideradas ao projetar JsonSerializer e como elas podem ser atenuadas, confira Modelo de riscoSystem.Text.Json
.
Acesso thread-safe
O serializador System.Text.Json
foi projetado com a segurança e o acesso thread-safe em mente. Na prática, isso significa que, uma vez bloqueadas, as instâncias de JsonSerializerOptions podem ser compartilhadas com segurança em vários threads. JsonDocument fornece uma representação do DOM imutável e no .NET 8 e versões posteriores, thread-safe, representação do DOM para valores JSON.