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
Sviluppo applicazioni x-plat con .NET MAUI
Specificare il numero di parentesi graffe nella string interpolation in combinazione con i string literal in C#
Definire la durata dell'output cache in ASP.NET Core 7
Effettuare update massivi con Entity Framework Core 7
Sfruttare lo streaming di una chiamata Http da Blazor
Sfruttare i tag nell'output cache di ASP.NET Core 7
Load test di ASP.NET Core con k6
Gestire gli errori di caricamento delle immagini
Linting di un Dockerfile con un workflow di GitHub
Gestire il breaking change di Entity Framework Core 7 con tabelle che usano identity e trigger
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Reactive form tipizzati con FormBuilder in Angular
I più letti di oggi
- Creare dei grafici con OWC
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Prima beta pubblica per il SP1 del .NET Framework 3.5 e VS 2008
- Speciale ADO.NET: accesso ai dati con il .NET Framework
- 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!
- Utilizzare la direttiva ngSrc di AngularJS per ottimizzare il caricamento delle immagini
- Utilizzare i collapse di Bootstrap 4
- Caricare i dati di configurazione allo startup di un'applicazione Angular