JSON vers classe C#

Collez un exemple de JSON et obtenez des classes C# POCO prêtes à être collées dans un fichier .cs. Choisit des types sensés, gère les objets imbriqués avec des définitions de classe supplémentaires, prend en charge les types de référence nullable et émet soit des attributs System.Text.Json soit Newtonsoft.Json selon votre projet.

Comment convertir JSON en C#

  1. 1

    Collez le JSON

    Un seul exemple suffit. Plusieurs exemples améliorent l'inférence des types nullable et des éléments de tableau.

  2. 2

    Choisissez le style

    System.Text.Json (.NET 6+) ou Newtonsoft.Json (héritage). Noms de propriétés en PascalCase avec `[JsonPropertyName]` pour JSON en camelCase.

  3. 3

    Choisissez la version C# cible

    C# 10+ pour les enregistrements et les espaces de noms à portée de fichier, C# 8 pour les types de référence nullable, ou plus ancien pour une compatibilité maximale.

  4. 4

    Copiez les classes

    Une classe racine plus des classes imbriquées pour chaque forme d'objet, le tout dans un fichier prêt à être intégré dans votre projet.

Exemple de sortie

Pour l’entrée :

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

Sortie System.Text.Json (C# 10+) :

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

    [JsonPropertyName("emails")]
    public List<string> Emails { get; set; } = new();

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

Mappage des types

JSON Type C#
chaîne string
entier int (ou long pour > int.MaxValue)
nombre (décimal) double (ou decimal si opté)
booléen bool
null object? (ou fusionné avec la valeur voisine)
date ISO-8601 DateTime (ou DateOnly)
chaîne de type GUID Guid
tableau de chaînes List<string>
objet Classe imbriquée

Options d’attributs

  • System.Text.Json ([JsonPropertyName("foo")]), préféré pour .NET 6+ et nouveaux projets.
  • Newtonsoft.Json ([JsonProperty("foo")]), pour les projets hérités ou lorsque vous avez besoin de fonctionnalités spécifiques à Newtonsoft.
  • Aucun, les noms de propriétés correspondent exactement aux clés JSON (ne fonctionne que si les clés JSON sont déjà en PascalCase).

Erreurs courantes

  • Utiliser int pour un champ qui pourrait déborder. Si votre JSON a des valeurs qui dépassent int.MaxValue, utilisez long. Le générateur promeut automatiquement lorsqu’il voit de grandes valeurs.
  • Oublier [JsonIgnore] pour les propriétés calculées. Si vous ajoutez des propriétés d’aide à la classe générée, décorez-les avec [JsonIgnore] ou elles seront sérialisées lors de la sortie.
  • Oublier l’analyse indépendante de la culture. Les champs decimal doivent être désérialisés avec CultureInfo.InvariantCulture; System.Text.Json le fait par défaut, Newtonsoft avec des paramètres globaux.
  • Faire confiance au générateur avec un seul exemple. La nullabilité et les types d’éléments de tableau sont devinés à partir de ce qu’il voit. Vérifiez toujours les annotations nullable par rapport au comportement réel de votre API.

Questions fréquentes

Pour les nouveaux projets sur .NET 6+, utilisez System.Text.Json, il est plus rapide, intégré et prend désormais en charge presque toutes les fonctionnalités de Newtonsoft. Utilisez Newtonsoft pour les projets hérités ou lorsque vous avez besoin de ses fonctionnalités spécifiques (résolveurs de contrat personnalisés, JObject, gestion dynamique).

Les enregistrements sont idiomatiques pour les DTO immuables en C# 10+. Ils vous donnent l’égalité de valeur et une syntaxe concise. Les classes sont meilleures lorsque vous avez besoin de mutation ou de compatibilité héritée. L’outil vous permet de choisir l’un ou l’autre.

Si votre projet utilise des types de référence nullable (C# 8+), les champs observés comme null dans n’importe quel exemple deviennent string?, int?, etc. Sans NRT, la nullabilité est signalée uniquement pour les types valeur (par exemple, int?).

Des tableaux mixtes de différentes formes d’objet ne sont pas directement représentables en C# fortement typé. L’outil infère une classe de base commune ou (en dernier recours) object; pour des tableaux mixtes, vous voudrez généralement restructurer le JSON.

Outils similaires

Outil disponible dans d’autres langues