Quando serializziamo o deserializziamo un oggetto con la classe JsonSerializer di System.Text.Json, tra i vari parametri che possiamo passare ci sono le opzioni di serializzazione espresse tramite un'istanza della classe JsonSerializerOptions. Quando dobbiamo usare la classe JsonSerializer passando sempre le stesse opzioni, possiamo ottenere un grosso miglioramento di performance e utilizzo della memoria mettendo in cache l'istanza della classe JsonSerializerOptions. Internamente, la libreria System.Text.Json associa all'istanza delle opzioni anche i metadati della classe da serializzare o deserializzare. Questo significa che quando usiamo una nuova istanza delle opzioni, i metadati vengono calcolati e quindi a ogni nuova istanza corrisponde un nuovo ricalcolo sempre degli stessi dati.
Per ottimizzare il processo di serializzazione/deserializzazione basta utilizzare una variabile statica con le opzioni.
public class CustomerService { readonly IHttpClientFactory _httpFactory; public static JsonSerializerOptions JsonOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); static CustomerService() { JsonOptions.Converters.Add(new DateOnlyJsonConverter()); } public CustomerService(IHttpClientFactory httpFactory) { _httpFactory = httpFactory; } public Task<CustomerRead> GetByIdAsync(string id) { return _httpFactory.CreateClient("api").GetFromJsonAsync<CustomerRead>($"Customers/{id}", JsonOptions)!; } }
In questo esempio, la classe CustomerService ha una variabile statica che rappresenta le opzioni e che viene utilizzata ogni volta che andiamo a deserializzare il risultato della chiamata all'API nel metodo GetByIdAsync.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione dei nomi con le regole @layer in CSS
Loggare le query più lente con Entity Framework
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Fornire parametri ad un Web component HTML
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Migliorare l'organizzazione delle risorse con Azure Policy
Creare una libreria CSS universale - Rotazione degli elementi
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Implementare il throttle in JavaScript
Gestione file Javascript in Blazor con .NET 9
Combinare Container Queries e Media Queries
Creare una libreria CSS universale: Immagini
I più letti di oggi
- .NET Conference Italia 2025 - Milano
- The Agentic Day - Milano
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- Gestione ciclo di vita in .NET Aspire
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Gestione file Javascript in Blazor con .NET 9
- Gestione CSS in Blazor con .NET 9