Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per impostazione predefinita, la libreria System.Text.Json enfatizza il comportamento letterale e deterministico ed evita qualsiasi ipotesi o interpretazione da parte del chiamante. La libreria è progettata intenzionalmente in questo modo per garantire prestazioni e sicurezza. Sebbene System.Text.Json sia altamente configurabile e le sue funzionalità possano essere utilizzate per ridurre al minimo le modifiche necessarie per i tipi serializzati, è importante considerare i compromessi tra la gestione dei tipi esistenti con il minor numero possibile di modifiche e il refactoring dei tipi per consentire una serializzazione idiomatica e sicura.
Quando si esegue la migrazione da BinaryFormatter a System.Text.Json, è fondamentale prendere nota dei comportamenti e delle opzioni seguenti:
Per impostazione predefinita, i campi non vengono serializzati o deserializzati da
System.Text.Json, ma possono essere annotati per la serializzazione. In alternativa,JsonSerializerOptions.IncludeFieldsè possibile impostare con cautela sutrueper includere tutti i campi pubblici per i tipi da serializzare.JsonSerializerOptions options = new() { IncludeFields = true };Per impostazione predefinita, System.Text.Jsonignora i campi e le proprietà private. È possibile abilitare l'utilizzo di una funzione di accesso non pubblica su una proprietà utilizzando l'attributo
[JsonInclude]. L'inclusione di campi privati richiede un lavoro aggiuntivo non semplice.System.Text.Json non può deserializzare campi o proprietà di sola lettura, ma l'attributo
[JsonConstructor]può essere usato per indicare che il costruttore specificato deve essere utilizzato per creare istanze del tipo alla deserializzazione. Il costruttore può impostare i campi e le proprietà di sola lettura.Per eseguire l'override del comportamento di serializzazione predefinito per un tipo specifico, è possibile scrivere convertitori personalizzati.
Supporta la serializzazione e la deserializzazione di molte raccolte, ma esistono limitazioni. Vedere la documentazione dei tipi supportati per informazioni dettagliate sui tipi e le raccolte supportati per la serializzazione e la deserializzazione.
In determinate condizioni, supporta la serializzazione e la deserializzazione di raccolte generiche personalizzate.
Altri tipi senza supporto predefinito sono:
DataSet,DataTable,DBNull,TimeZoneInfo,Type,ValueTuple. Tuttavia, è possibile scrivere un convertitore personalizzato per supportare questi tipi.Supporta la serializzazione e la deserializzazione della gerarchia dei tipi polimorfici in cui i tipi sono stati esplicitamente acconsentiti tramite l'attributo o il
[JsonDerivedType]convertitore personalizzato. Le gerarchie di ereditarietà aperta non sono supportate e il round trip con polimorfismo richiede identificatori discriminatori di tipo per tutti i tipi derivati noti.L'attributo
[JsonIgnore]in una proprietà fa sì che la proprietà venga omessa dal codice JSON durante la serializzazione.Per mantenere i riferimenti e gestire riferimenti circolari in
System.Text.Json, impostareJsonSerializerOptions.ReferenceHandlersuReferenceHandler.Preserve.Serialization può essere ampiamente personalizzato con contratti personalizzati, sbloccando molti scenari riducendo al minimo le modifiche ai tipi serializzati.