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
Esporre un server MCP esistente con Azure API Management
Ricerca delle GitHub issue tramite operatori logici
Integrare LLM alle nostre applicazioni in .NET con MCP
Integrare Agenti A2A in Azure API Management
Utilizzare i command service nei test con .NET Aspire
Gestire codice JavaScript con code splitting e lazy loading
Utilizzare WhenEach per processare i risultati di una lista di task
Self-healing degli unit test con Copilot in GitHub
Semplificare i deployment con le label in Azure Container App
Come automatizzare il download dei report di billing da GitHub Enterprise
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Eseguire query in contemporanea con EF


