La conversione da JSON a C# è il processo di generazione di definizioni di classi C# fortemente tipizzate a partire da dati JSON. Quando un'applicazione .NET riceve JSON da un'API, da un file di configurazione o da una coda di messaggi, ha bisogno di classi C# per deserializzare quei dati in oggetti. Scrivere queste classi a mano è tedioso e soggetto a errori, specialmente quando il JSON contiene oggetti annidati, array e tipi misti.
Un generatore da JSON a classi C# ispeziona la struttura e i valori del JSON, deduce il tipo C# appropriato per ogni campo e produce definizioni di classi con accessori di proprietà e attributi di serializzazione. L'output segue le convenzioni di denominazione .NET: nomi di proprietà in PascalCase, attributi JsonPropertyName per la mappatura alle chiavi JSON originali in camelCase o snake_case, e utilizzo corretto di List'<'T'>' per gli array.
Questa conversione è particolarmente comune nelle web API ASP.NET Core, in Azure Functions e in qualsiasi servizio .NET che consuma dati JSON esterni. Invece di usare dynamic o Dictionary'<'string, object'>', le classi tipizzate offrono sicurezza in fase di compilazione, supporto IntelliSense e protezione dagli errori di battitura nei nomi dei campi che altrimenti emergerebbero solo a runtime. Incolla il tuo JSON in questo strumento e ottieni subito classi C# pronte all'uso.
Perché usare un generatore da JSON a C#?
Scrivere manualmente classi modello C# da esempi JSON richiede tempo e introduce errori umani. Un generatore gestisce le parti ripetitive così puoi concentrarti sulla logica di business.
⚡
Generazione istantanea delle classi
Incolla il JSON e ottieni classi C# complete in meno di un secondo. Nessuna digitazione manuale delle proprietà, nessun campo dimenticato.
🔒
Elaborazione con privacy garantita
Tutta la conversione avviene nel browser. I tuoi dati JSON non lasciano mai il tuo computer, quindi chiavi API, token e dati personali restano privati.
📋
Mappatura corretta degli attributi
Le classi generate includono attributi JsonPropertyName che mappano le proprietà C# in PascalCase ai nomi delle chiavi JSON originali, prevenendo errori di deserializzazione.
🌐
Nessun account o installazione richiesti
Apri la pagina e incolla il tuo JSON. Nessun pacchetto NuGet da installare, nessuna estensione di Visual Studio da configurare, nessun modulo di registrazione.
Casi d'uso di JSON in C#
Integrazione API backend
Genera modelli di richiesta e risposta per API REST di terze parti. Incolla il JSON di esempio dalla documentazione dell'API e ottieni classi C# pronte all'uso per le chiamate HttpClient.
Controller ASP.NET Core
Crea classi modello per i parametri dei metodi action. Quando il tuo endpoint accetta un body JSON, la classe generata ti offre binding automatico dei modelli e validazione.
Azure Functions e Serverless
Costruisci binding di input e output per Azure Functions che elaborano messaggi JSON da code, event hub o trigger HTTP.
Deserializzazione della configurazione
Converti sezioni di appsettings.json o file di configurazione esterni in classi di opzioni C# tipizzate per l'uso con IOptions'<'T'>' nella dependency injection.
Seeding e migrazione del database
Trasforma i file fixture JSON in oggetti C# per i dati di seed di Entity Framework, configurazioni di test di integrazione o script di migrazione dei dati.
Apprendimento del sistema di tipi C#
Studenti e sviluppatori nuovi a .NET possono vedere come i tipi JSON si mappano ai tipi C#, comprendere gli accessori di proprietà e imparare gli attributi di serializzazione attraverso esempi pratici.
Riferimento per la mappatura dei tipi JSON-C#
Ogni tipo di valore JSON si mappa a un tipo C# specifico. Il generatore analizza i valori effettivi per scegliere il tipo più preciso. Ad esempio, un numero JSON senza punto decimale diventa int, mentre 3.14 diventa double. I valori null producono object? (tipo riferimento nullable) poiché il tipo effettivo non può essere dedotto dal solo null.
Tipo JSON
Esempio
Tipo C#
string
"hello"
string
number (int)
42
int
number (float)
3.14
double
boolean
true, false
bool
null
null
object?
object
{"key": "value"}
nested class
array
[1, 2, 3]
List<int>
array of objects
[{"id": 1}]
List<ClassName>
System.Text.Json vs Newtonsoft.Json
.NET dispone di due principali librerie di serializzazione JSON. Le classi generate da questo strumento usano gli attributi System.Text.Json (JsonPropertyName), l'opzione integrata dal .NET Core 3.0. Se il tuo progetto usa Newtonsoft.Json, puoi sostituire gli attributi.
System.Text.Json
Integrato in .NET dal Core 3.0. Più veloce e con minore allocazione di memoria rispetto a Newtonsoft. Usa [JsonPropertyName] per la mappatura delle proprietà. La scelta predefinita per i nuovi progetti .NET 6+. Non supporta tutte le funzionalità di Newtonsoft come JsonPath o la gestione dei riferimenti out of the box.
Newtonsoft.Json
La libreria JSON .NET originale (Json.NET). Usa [JsonProperty] per la mappatura delle proprietà. Supporta scenari più avanzati: serializzazione polimorfica, query JsonPath, converter personalizzati con maggiore flessibilità. Ancora comune nelle codebase legacy e nei progetti che necessitano di funzionalità assenti in System.Text.Json.
Esempi di codice
Questi esempi mostrano come definire e usare le classi C# generate da JSON, con entrambe le principali librerie di serializzazione, e come automatizzare la generazione dalla riga di comando.
C# (System.Text.Json)
using System.Text.Json;
var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"
public class User
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("active")]
public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;
var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98
public class User
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("scores")]
public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs
// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp
// Output:
// public class Root
// {
// [JsonPropertyName("id")]
// public int Id { get; set; }
//
// [JsonPropertyName("name")]
// public string Name { get; set; }
// }
Qual è la differenza tra JsonPropertyName e JsonProperty?
JsonPropertyName è l'attributo di System.Text.Json, il serializzatore .NET integrato. JsonProperty appartiene a Newtonsoft.Json (Json.NET), una libreria di terze parti. Entrambi mappano un nome di proprietà C# a un nome di campo JSON, ma appartengono a namespace diversi e non sono intercambiabili. Usa JsonPropertyName per i nuovi progetti .NET 6+ e JsonProperty se il tuo progetto dipende già da Newtonsoft.
Come gestisce il generatore gli oggetti JSON annidati?
Ogni oggetto annidato diventa una propria classe C#. La proprietà nella classe padre usa la classe annidata come tipo. Ad esempio, se il JSON ha un campo "address" contenente un oggetto con "street" e "city", il generatore crea una classe Address e tipizza la proprietà come Address nella classe padre.
Cosa succede con gli array JSON che contengono tipi misti?
Il generatore deduce il tipo degli elementi dell'array dal primo elemento non null. Se l'array contiene tipi misti (stringhe e numeri insieme), il tipo generato ricade su List'<'object'>'. In pratica, le risposte API ben strutturate raramente mescolano tipi all'interno di un singolo array.
Posso usare le classi generate con Entity Framework?
Sì, ma dovrai aggiungere annotazioni specifiche di EF come [Key], [Required] o gli attributi [Column]. Le classi generate ti forniscono la struttura delle proprietà; trattale come uno scaffold e aggiungi la configurazione EF sopra di esse. EF si aspetta anche un costruttore senza parametri, che le classi generate già hanno per impostazione predefinita.
Come vengono convertiti in C# i valori null nel JSON?
Un valore null JSON produce il tipo object? perché il generatore non può determinare il tipo previsto dal solo null. Dopo la generazione, dovresti sostituire object? con il tipo nullable corretto (string?, int?, o una classe specifica?) in base alla tua conoscenza dello schema API.
Il JSON in camelCase viene mappato automaticamente a proprietà C# in PascalCase?
Sì. Il generatore converte le chiavi JSON come "firstName" in proprietà PascalCase come FirstName e aggiunge un attributo [JsonPropertyName("firstName")]. Questo garantisce che il serializzatore mappa automaticamente tra le due convenzioni di denominazione durante la serializzazione e la deserializzazione.
Come gestisco JSON con campi opzionali in C#?
Rendi il tipo della proprietà nullable (ad es., string? o int?) e imposta un valore predefinito. Con System.Text.Json, puoi anche configurare JsonSerializerOptions.DefaultIgnoreCondition per ignorare i valori null durante la serializzazione. Il generatore produce tipi non nullable per impostazione predefinita, quindi rivedi e aggiusta la nullabilità in base al contratto API.