La conversion JSON vers C# est le processus de génération de définitions de classes C# fortement typées à partir de données JSON. Lorsqu'une application .NET reçoit du JSON provenant d'une API, d'un fichier de configuration ou d'une file de messages, elle a besoin de classes C# pour désérialiser ces données en objets. Écrire ces classes à la main est fastidieux et source d'erreurs, surtout lorsque le JSON contient des objets imbriqués, des tableaux et des types mixtes.
Un générateur de classes C# à partir de JSON inspecte la structure et les valeurs de votre JSON, déduit le type C# approprié pour chaque champ et produit des définitions de classes avec des accesseurs de propriétés et des attributs de sérialisation. La sortie suit les conventions de nommage .NET : noms de propriétés en PascalCase, attributs JsonPropertyName pour mapper les clés JSON originales en camelCase ou snake_case, et utilisation correcte de List'<'T'>' pour les tableaux.
Cette conversion est particulièrement courante dans les APIs web ASP.NET Core, les Azure Functions et tout service .NET qui consomme des données JSON externes. Plutôt que d'utiliser dynamic ou Dictionary'<'string, object'>', les classes typées vous offrent la sûreté à la compilation, le support IntelliSense et une protection contre les fautes de frappe dans les noms de champs qui ne se manifesteraient autrement qu'à l'exécution. Collez votre JSON dans cet outil et obtenez des classes C# prêtes à l'emploi instantanément.
Pourquoi utiliser un générateur JSON vers C# ?
Écrire manuellement des classes de modèles C# à partir d'exemples JSON prend du temps et introduit des erreurs humaines. Un générateur prend en charge les parties répétitives afin que tu puisses te concentrer sur la logique métier.
⚡
Génération de classes instantanée
Colle ton JSON et obtiens des classes C# complètes en moins d'une seconde. Aucune saisie manuelle des propriétés, aucun oubli de champ.
🔒
Traitement axé sur la confidentialité
Toute la conversion s'exécute dans ton navigateur. Tes données JSON ne quittent jamais ta machine, donc les clés API, les tokens et les données personnelles restent privés.
📋
Mappage d'attributs correct
Les classes générées incluent des attributs JsonPropertyName qui mappent les propriétés C# en PascalCase aux noms de clés JSON originaux, évitant ainsi les erreurs de désérialisation.
🌐
Aucun compte ni installation requis
Ouvre la page et colle ton JSON. Aucun paquet NuGet à installer, aucune extension Visual Studio à configurer, aucun formulaire d'inscription.
Cas d'usage JSON vers C#
Intégration d'API backend
Génère des modèles de requêtes et de réponses pour des APIs REST tierces. Colle l'exemple de JSON de la documentation API et obtiens des classes C# prêtes à l'emploi pour les appels HttpClient.
Contrôleurs ASP.NET Core
Crée des classes de modèles pour les paramètres des méthodes d'action. Lorsque ton endpoint accepte un corps JSON, la classe générée te fournit la liaison de modèle automatique et la validation.
Azure Functions & Serverless
Construis des liaisons d'entrée et de sortie pour les Azure Functions qui traitent des messages JSON provenant de files d'attente, d'event hubs ou de déclencheurs HTTP.
Désérialisation de configuration
Convertis des sections d'appsettings.json ou des fichiers de configuration externes en classes d'options C# typées pour une utilisation avec IOptions'<'T'>' dans l'injection de dépendances.
Alimentation et migration de base de données
Transforme des fichiers de fixtures JSON en objets C# pour les données de départ d'Entity Framework, les configurations de tests d'intégration ou les scripts de migration de données.
Apprentissage du système de types C#
Les étudiants et les développeurs qui découvrent .NET peuvent voir comment les types JSON se mappent aux types C#, comprendre les accesseurs de propriétés et apprendre les attributs de sérialisation par l'exemple.
Référence de mappage de types JSON vers C#
Chaque type de valeur JSON se mappe à un type C# spécifique. Le générateur analyse les valeurs réelles pour choisir le type le plus précis. Par exemple, un nombre JSON sans décimale devient int, tandis que 3,14 devient double. Les valeurs null produisent object? (type référence nullable) car le type réel ne peut pas être déduit d'un null seul.
Type JSON
Exemple
Type 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 dispose de deux grandes bibliothèques de sérialisation JSON. Les classes générées par cet outil utilisent les attributs de System.Text.Json (JsonPropertyName), qui est l'option intégrée depuis .NET Core 3.0. Si ton projet utilise Newtonsoft.Json, tu peux remplacer les attributs.
System.Text.Json
Intégré à .NET depuis Core 3.0. Plus rapide et avec une allocation mémoire inférieure à Newtonsoft. Utilise [JsonPropertyName] pour le mappage des propriétés. Le choix par défaut pour les nouveaux projets .NET 6+. Ne prend pas en charge toutes les fonctionnalités de Newtonsoft comme JsonPath ou la gestion des références nativement.
Newtonsoft.Json
La bibliothèque JSON .NET originale (Json.NET). Utilise [JsonProperty] pour le mappage des propriétés. Prend en charge des scénarios plus avancés : sérialisation polymorphique, requêtes JsonPath, convertisseurs personnalisés avec plus de flexibilité. Encore répandue dans les bases de code existantes et les projets nécessitant des fonctionnalités absentes de System.Text.Json.
Exemples de code
Ces exemples montrent comment définir et utiliser des classes C# générées à partir de JSON, avec les deux principales bibliothèques de sérialisation, ainsi que comment automatiser la génération depuis la ligne de commande.
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; }
// }
Quelle est la différence entre JsonPropertyName et JsonProperty ?
JsonPropertyName est l'attribut de System.Text.Json, le sérialiseur .NET intégré. JsonProperty provient de Newtonsoft.Json (Json.NET), une bibliothèque tierce. Les deux mappent un nom de propriété C# à un nom de champ JSON, mais ils appartiennent à des espaces de noms différents et ne sont pas interchangeables. Utilise JsonPropertyName pour les nouveaux projets .NET 6+ et JsonProperty si ton projet dépend déjà de Newtonsoft.
Comment le générateur gère-t-il les objets JSON imbriqués ?
Chaque objet imbriqué devient sa propre classe C#. La propriété dans la classe parente utilise la classe imbriquée comme type. Par exemple, si ton JSON contient un champ "address" contenant un objet avec "street" et "city", le générateur crée une classe Address et type la propriété en Address dans la classe parente.
Que se passe-t-il avec les tableaux JSON contenant des types mixtes ?
Le générateur déduit le type des éléments du tableau à partir du premier élément non nul. Si le tableau contient des types mixtes (chaînes et nombres ensemble), le type généré se replie sur List'<'object'>'. En pratique, les réponses d'API bien structurées mélangent rarement les types au sein d'un même tableau.
Puis-je utiliser les classes générées avec Entity Framework ?
Oui, mais tu devras ajouter des annotations spécifiques à EF comme les attributs [Key], [Required] ou [Column]. Les classes générées te fournissent la structure des propriétés ; traite-les comme un échafaudage et ajoute la configuration EF par-dessus. EF attend également un constructeur sans paramètres, que les classes générées possèdent déjà par défaut.
Comment les valeurs null dans JSON sont-elles converties en C# ?
Une valeur JSON null produit le type object? car le générateur ne peut pas déterminer le type attendu à partir d'un null seul. Après la génération, tu dois remplacer object? par le type nullable correct (string?, int?, ou une classe spécifique?) selon ta connaissance du schéma API.
Le JSON en camelCase est-il automatiquement mappé aux propriétés C# en PascalCase ?
Oui. Le générateur convertit les clés JSON comme "firstName" en propriétés PascalCase comme FirstName et ajoute un attribut [JsonPropertyName("firstName")]. Cela garantit que le sérialiseur mappe automatiquement entre les deux conventions de nommage lors de la sérialisation et de la désérialisation.
Comment gérer du JSON avec des champs optionnels en C# ?
Rends le type de propriété nullable (par ex., string? ou int?) et définis une valeur par défaut. Avec System.Text.Json, tu peux aussi configurer JsonSerializerOptions.DefaultIgnoreCondition pour ignorer les valeurs null lors de la sérialisation. Le générateur produit des types non nullables par défaut, alors vérifie et ajuste la nullabilité en fonction de ton contrat API.