loading experience

.NET

System.Text.Json in .NET 10: JSON più rigoroso e sicuro

Proprietà duplicate, opzioni rigorose e lettura da PipeReader: le novità del serializzatore JSON di .NET.

System.Text.Json in .NET 10: JSON più rigoroso e sicuro

System.Text.Json è il serializzatore JSON integrato in .NET. In .NET 10 aggiunge opzioni pensate soprattutto per chi riceve JSON da fonti esterne e vuole essere rigoroso.

Con le opzioni rigorose i documenti ambigui si fermano prima di diventare dati.
Con le opzioni rigorose i documenti ambigui si fermano prima di diventare dati.

Rifiutare le proprietà duplicate

Un JSON con la stessa proprietà ripetuta due volte è ambiguo: quale valore vale? Alcuni attacchi sfruttano proprio la differenza di interpretazione tra sistemi diversi. Ora si può chiedere al serializzatore di rifiutare questi documenti.

var options = new JsonSerializerOptions
{
    AllowDuplicateProperties = false
};

// lancia JsonException: "importo" compare due volte
var json = "{ \"importo\": 10, \"importo\": 1000 }";
var p = JsonSerializer.Deserialize<Pagamento>(json, options);

Un profilo rigoroso già pronto

JsonSerializerOptions.Strict raccoglie le impostazioni più severe: niente proprietà sconosciute, niente duplicati, rispetto dei tipi nullable e dei parametri obbligatori dei costruttori. È un buon punto di partenza per le API pubbliche.

var ordine = JsonSerializer.Deserialize<Ordine>(json, JsonSerializerOptions.Strict);

Lettura diretta da PipeReader

Le applicazioni ad alte prestazioni, come ASP.NET Core, leggono i dati in arrivo tramite PipeReader. In .NET 10 il serializzatore può deserializzare direttamente da questa sorgente, evitando copie intermedie in memoria.

Consigli

  • Usa la generazione del codice (JsonSerializerContext) per prestazioni migliori e compatibilità con Native AOT.
  • Definisci opzioni condivise una sola volta e riutilizzale: crearle ogni volta è costoso.
  • Per i dati in ingresso preferisci impostazioni rigorose; per quelli in uscita puoi essere più permissivo.
Commenti (0)

Nessun commento ancora.

Lascia un commento