JSON to C#
Générez des records C# avec attributs JsonPropertyName depuis un échantillon JSON, pour System.Text.Json.
Entrée JSON
Code généré
Saisissez du JSON à gauche pour générer un type à partir de celui-ci.
Qu'est-ce que JSON to C# ?
Un convertisseur JSON vers C# transforme un échantillon de charge utile JSON en déclarations de records C# prêts à désérialiser avec System.Text.Json, le sérialiseur intégré au .NET moderne. Les records à propriétés init-only sont la manière idiomatique actuelle de modéliser une réponse d'API : l'objet est immuable une fois construit, l'égalité par valeur est gratuite, et le sérialiseur peut le remplir directement. La sortie générée porte aussi un attribut [JsonPropertyName] sur chaque propriété, ce qui rend le mapping fiable — la convention C# capitalise les noms de propriétés tandis que les clés JSON sont typiquement en camelCase ou snake_case, et compter sur la politique de nommage du sérialiseur pour combler cet écart est une source fréquente de propriétés qui se désérialisent silencieusement en null. Chaque nom de propriété est converti en PascalCase quel que soit la casse de la clé source — camelCase, snake_case ou kebab-case deviennent tous la forme PascalCase qu'attend le langage — tandis que la clé d'origine du fil ne survit que dans l'attribut. Un nombre JSON avec décimales est typé `double`, correspondant à la façon dont System.Text.Json lui-même traite un nombre JSON non typé, plutôt que `float` ou `decimal`.
Comment utiliser JSON to C#
- Collez une réponse JSON représentative dans le panneau de gauche — les propriétés générées correspondent exactement aux clés présentes dans cet échantillon.
- Définissez un nom de record racine au-dessus de la sortie (par défaut « Root ») ; chaque objet imbriqué devient son propre record nommé d'après la clé qui le contient.
- Copiez les records dans votre projet et désérialisez avec JsonSerializer.Deserialize<Root>(json).
- Utilisez le sélecteur de langue au-dessus de la sortie pour émettre la même forme en record Java ou data class Kotlin à la place.
Exemples
Objet plat avec attributs JsonPropertyName
Entrée
{"id": 1, "name": "Ada"}
Sortie
using System.Text.Json.Serialization; public record Root { [JsonPropertyName("id")] public int Id { get; init; } [JsonPropertyName("name")] public string Name { get; init; } }
Un objet imbriqué devient son propre record
Entrée
{"user": {"id": 1, "roles": ["admin"]}}
Sortie
using System.Text.Json.Serialization; using System.Collections.Generic; public record User { [JsonPropertyName("id")] public int Id { get; init; } [JsonPropertyName("roles")] public List<string> Roles { get; init; } } public record Root { [JsonPropertyName("user")] public User User { get; init; } }
Une valeur décimale devient double
Entrée
{"id": 1, "price": 9.99}
Sortie
using System.Text.Json.Serialization; public record Root { [JsonPropertyName("id")] public int Id { get; init; } [JsonPropertyName("price")] public double Price { get; init; } }
Erreurs courantes
- Renommer une propriété C# sans mettre à jour son [JsonPropertyName] — le sérialiseur ne trouve alors aucune clé correspondante et laisse la propriété à sa valeur par défaut, sans exception pour pointer la cause.
- Supposer qu'une politique de nommage camelCase couvre toute la charge utile, ce qui casse dès qu'une clé utilise une convention différente et produit des nulls qui ressemblent à un problème d'API plutôt que de mapping.
- Laisser des types de référence non nullables sur des champs que l'API peut omettre, ce qui déclenche soit des avertissements du compilateur, soit un null dans une propriété que le système de types prétend ne pas pouvoir être null.
- Laisser un champ monétaire typé comme le double généré — remplacez-le par decimal à la main quand la précision compte, car le générateur ne peut pas savoir qu'un nombre représente une devise.
- S'attendre à ce qu'une clé snake_case ou kebab-case survive comme nom de propriété C# — chaque propriété est convertie en PascalCase pour vous, et la clé d'origine ne survit qu'au sein de l'attribut [JsonPropertyName].
Pourquoi utiliser cet outil
- Émet des attributs [JsonPropertyName] explicites, évitant les décalages de politique de nommage qui mettent silencieusement des propriétés à null.
- Ajoute les directives using requises, y compris System.Collections.Generic quand la charge utile contient des tableaux.
- Fonctionne entièrement côté client — une réponse d'API de production collée comme échantillon n'atteint jamais un serveur.
- Convertit chaque nom de propriété en PascalCase automatiquement quelle que soit la casse de la clé source, tout en gardant la clé d'origine intacte via [JsonPropertyName] pour le sérialiseur.
- Infère int contre double par valeur depuis l'échantillon au lieu d'attribuer à tous les nombres JSON un unique type numérique imprécis.