Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O System.Text.Json padrão da biblioteca enfatiza o comportamento literal e determinístico e evita qualquer adivinhação ou interpretação em nome do chamador. A biblioteca foi intencionalmente concebida desta forma para garantir a segurança e o desempenho. Embora System.Text.Json seja altamente configurável e seus recursos possam ser usados para minimizar as alterações necessárias nos 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 permitir a serialização idiomática e segura.
Ao migrar de BinaryFormatter para o 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.IncludeFieldspode ser definido cautelosamente paratrueincluir 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 particulares. Você pode habilitar o uso de um acessador não público em uma propriedade usando o
[JsonInclude]atributo. Incluir campos privados requer algum trabalho extra não trivial.System.Text.Json Não é possível desserializar campos ou propriedades somente leitura, mas o
[JsonConstructor]atributo 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 somente leitura e propriedades.Para substituir o comportamento de serialização padrão para um tipo específico, você pode escrever conversores personalizados.
Ele suporta serialização e desserialização de muitas coleções, mas há limitações. Consulte a documentação sobre os tipos suportados para obter detalhes sobre quais tipos e coleções são suportados para serialização e desserialização.
Sob determinadas condições, é possível a serialização e desserialização de coleções genéricas personalizadas.
Outros tipos sem suporte integrado são:
DataSet,DataTable, ,DBNull,TimeZoneInfo,Type.ValueTupleNo entanto, você pode escrever um conversor personalizado para suportar esses tipos.Ele suporta serialização e desserialização de hierarquia de tipos polimórficos onde os tipos foram explicitamente aceitos por meio do atributo
[JsonDerivedType]ou conversor personalizado. Não há suporte para hierarquias de herança abertas, e o disparo de ida e volta com polimorfismo requer identificadores discriminadores de tipo para todos os tipos derivados conhecidos.O atributo
[JsonIgnore]em uma propriedade faz com que a propriedade seja omitida do JSON durante a serialização.Para preservar referências e manipular referências circulares em
System.Text.Json, definaJsonSerializerOptions.ReferenceHandlercomoReferenceHandler.Preserve.Serialization pode ser amplamente personalizado com contratos personalizados, desbloqueando muitos cenários enquanto minimiza as alterações nos tipos serializados.