Serialização e desserialização JSON no .NET - visão geral
O namespace System.Text.Json fornece funcionalidade para serializar e desserializar (ou empacotar e desempacotar) JavaScript Object Notation (JSON). Serialização é o processo de converter o estado de um objeto, ou seja, os valores de suas propriedades, em uma forma que pode ser armazenada ou transmitida. 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 a partir do formulário serializado.
O design da System.Text.Json
biblioteca enfatiza o alto desempenho e a baixa alocação de memória em um extenso conjunto de recursos. O suporte UTF-8 integrado otimiza o processo de leitura e gravação de texto JSON codificado como UTF-8, que é a codificação mais prevalente para dados na Web e arquivos no disco.
A biblioteca também fornece classes para trabalhar com um modelo de objeto de documento (DOM) na memória. Esse recurso permite o acesso aleatório aos elementos em um arquivo JSON ou cadeia de caracteres.
Para o Visual Basic, há algumas limitações sobre quais partes da biblioteca você pode usar. Para obter mais informações, consulte Suporte do Visual Basic.
Como obter a biblioteca
A biblioteca é interna como parte da estrutura compartilhada para .NET Core 3.0 e versões posteriores. O recurso de geração de origem é interno como parte da estrutura compartilhada para .NET 6 e versões posteriores.
Para versões de estrutura anteriores ao .NET Core 3.0, instale o System.Text.Json pacote NuGet. O pacote suporta:
- .NET Standard 2.0 e posterior
- .NET Framework 4.6.2 e posterior
- .NET 8 e posterior
Namespaces e APIs
- O System.Text.Json namespace contém todos os pontos de entrada e os tipos principais.
- O System.Text.Json.Serialization namespace contém atributos e APIs para cenários avançados e personalização específica 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 suporta as seguintes APIs de serialização que você pode ter usado anteriormente:
- Atributos do System.Runtime.Serialization namespace.
- O System.SerializableAttribute atributo e a ISerializable interface. Esses tipos são usados apenas para serialização binária e XML.
Reflexão vs. geração de fontes
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 código-fonte C# para melhorar o desempenho, reduzir o uso de memória privada e facilitar o corte de montagem, o que reduz o tamanho do aplicativo.
Para obter mais informações, consulte Reflexão versus geração de origem.
Informações de segurança
Para obter informações sobre ameaças à segurança que foram consideradas ao projetar JsonSerializere como elas podem ser atenuadas, consulte System.Text.Json
Modelo de ameaça.
Segurança de roscas
O System.Text.Json
serializador foi projetado com a segurança do thread em mente. Na prática, isso significa que, uma vez bloqueadas, JsonSerializerOptions as instâncias podem ser compartilhadas com segurança em vários threads.
JsonDocument fornece uma representação DOM imutável e, no .NET 8 e versões posteriores, thread-safe, para valores JSON.