Che cosa fa questo strumento
Un campione JSON diventa record C#, uno per oggetto.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
using System.Text.Json.Serialization;
public record Root(
[property: JsonPropertyName("id")] long Id,
[property: JsonPropertyName("firstName")] string FirstName,
[property: JsonPropertyName("address")] Address Address
);
public record Address(
[property: JsonPropertyName("city")] string City
);
I record posizionali richiedono C# 9; lo using compare solo se compare un attributo.
Il bersaglio dell’attributo conta
I nomi delle proprietà C# sono in PascalCase: firstName diventa FirstName, e content-type diventa ContentType. System.Text.Json confronta senza distinguere maiuscole solo se glielo chiedi, e mai attraverso un trattino — perciò la chiave è fissata da un attributo.
Il prefisso property: è la parte che si sbaglia facilmente. In un record posizionale il parametro non è la proprietà: un attributo senza bersaglio resta sul parametro del costruttore, e il serializzatore non lo vede mai. Con il bersaglio finisce dove viene letto.
I tipi
- Gli interi diventano
long, i decimalidouble— entrambi più larghi del predefinito a 32 bit, perché un numero JSON non promette di starci. nulle i valori ignoti diventanoobject?, il che presuppone i tipi riferimento annullabili attivi (predefiniti dal .NET 6).- Gli array diventano
List<T>; uno misto diventaList<object>, salvo quando mescola interi e decimali: lìList<double>copre entrambi. - Uno scalare alla radice è rifiutato: C# non ha un alias di tipo globale, quindi
42non ha in cosa diventare. Un array di oggetti ti dà il record del suo elemento, quello che leghi a unaList<Root>.
Ciò che un campione non può dire
Nessuna proprietà è annullabile oltre a quegli object?, e nessuna ha un valore predefinito: il documento aveva un valore per ciascuna. required e init valgono la pena quando saprai quali chiavi sono davvero obbligatorie — un campione dice solo quali c’erano.
Privato per progettazione
Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.