Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A biblioteca System.Text.Json
usa como padrão enfatizar o comportamento literal e determinístico e evita qualquer adivinhação ou interpretação em nome do chamador. A biblioteca foi projetada intencionalmente dessa forma por conta do desempenho e segurança. Embora System.Text.Json
seja altamente configurável e seus recursos possam ser usados para minimizar as alterações necessárias para tipos serializados, é importante considerar as compensações entre lidar com tipos existentes com o mínimo possível de alterações versus tipos de refatoração para habilitar a serialização idiomática e segura.
Ao migrar de BinaryFormatter para System.Text.Json
, é crucial observar os seguintes comportamentos e opções:
Por padrão, campos não são serializados ou desserializados por
System.Text.Json
, mas podem ser anotados para serialização. Como alternativa,JsonSerializerOptions.IncludeFields
pode ser cuidadosamente definido comotrue
para incluir todos os campos públicos para os tipos que estão sendo serializados.JsonSerializerOptions options = new() { IncludeFields = true };
Por padrão, System.Text.Jsonignora campos e propriedades privados. Você pode habilitar o uso de um acessador não público em uma propriedade usando o atributo
[JsonInclude]
. A inclusão de campos privados requer um trabalho extra considerável.System.Text.Json não pode desserializar campos ou propriedades somente leitura, mas o atributo
[JsonConstructor]
pode ser usado para indicar que o construtor especificado deve ser usado para criar instâncias do tipo na desserialização. O construtor pode definir os campos e as propriedades somente leitura.Para substituir o comportamento de serialização padrão para um tipo específico, você pode escrever conversores personalizados.
Ele dá suporte à serialização e à desserialização de muitas coleções, mas há limitações. Consulte a documentação de tipos com suporte para obter detalhes sobre quais tipos e coleções têm suporte para serialização e desserialização.
Em determinadas condições, ele dá suporte à serialização e à desserialização de coleções genéricas personalizadas.
Outros tipos sem suporte interno são:
DataSet
,DataTable
,DBNull
,TimeZoneInfo
,Type
,ValueTuple
. No entanto, você pode escrever um conversor personalizado para dar suporte a esses tipos.Ele dá suporte à serialização e à desserialização de hierarquia de tipo polimórfico em que os tipos foram explicitamente aceitos por meio do atributo
[JsonDerivedType]
ou do conversor personalizado. Não há suporte para hierarquias de herança abertas e o arredondamento com polimorfismo requer identificadores discriminatórios de tipo para todos os tipos derivados conhecidos.O
[JsonIgnore]
atributo em uma propriedade faz com que a propriedade seja omitida do JSON durante a serialização.Para preservar referências e lidar com referências circulares em
System.Text.Json
, definaJsonSerializerOptions.ReferenceHandler
comoReferenceHandler.Preserve
.Serialization pode ser amplamente personalizado com contratos personalizados, desbloqueando muitos cenários, minimizando as alterações em tipos serializados.