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
Filtering sulle colonne in una QuickGrid di Blazor
Sostituire la GitHub Action di login su private registry
Proteggere le risorse Azure con private link e private endpoints
Paginare i risultati con QuickGrid in Blazor
Effettuare il refresh dei dati di una QuickGrid di Blazor
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Creare alias per tipi generici e tuple in C#
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Assegnare un valore di default a un parametro di una lambda in C#
Migliorare l'organizzazione delle risorse con Azure Policy
Migliorare la sicurezza dei prompt con Azure AI Studio
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online