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
Configurare OpenTelemetry per Application Insights su ASP.NET Core
From Data to Insight: Exploratory Data Analysis with Python, VS Code and SQL MCP Server
Ottimizzare i costi con Smart tier in Azure Blob Storage
Shadow DOM open e closed sulla gestione delle pagine
Semplificare i deployment con le label in Azure Container App
Mappare una complex property di una entity su un campo JSON
Gestione delle issue type con GitHub
Welcome to Future Dev Day 2026
Building Custom Developer Agents
Utilizzare noopener e noreferrer nei link HTML
Modificare lo stile in una QuickGrid Blazor
Running workloads and operations with Azure Kubernetes Service
I più letti di oggi
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Esaminare documenti con namespace con LINQ e XDocument
- Accedere a dati esposti con WebService con Silverlight 1.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit


