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
Gestire i dati con Azure Cosmos DB Data Explorer
Potenziare la ricerca su Cosmos DB con Full Text Search
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Applicare un filtro per recuperare alcune issue di GitHub
Recuperare le subissue e il loro stato di completamento in GitHub
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Gestione dell'annidamento delle regole dei layer in CSS
Aggiornare a .NET 9 su Azure App Service
Recuperare gli audit log in Azure DevOps
Gestione dei nomi con le regole @layer in CSS
Gestire il routing HTTP in Azure Container App
I più letti di oggi
- Disponibile la release finale di Moonlight 1.0
- domani su @aspitalia troverete un articolo speciale dedicato a Windows Phone 8: non ... https://aspit.co/wp-summit #WPSummit
- vuoi costruire applicazioni web in real time? non perdere il nostro speciale! https://aspit.co/aln #signalr #websockets #polling #aspnet
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare l'access modifier private protected in C# 7.2