JSON naar C#-klasse

Plak een JSON-voorbeeld en krijg C#-POCO-klassen die je meteen in een .cs-bestand kunt plakken. De tool kiest zinnige typen, verwerkt geneste objecten met extra klassedefinities, ondersteunt nullbare referentietypen en genereert, afhankelijk van je project, attributen voor System.Text.Json of Newtonsoft.Json.

JSON naar C# converteren

  1. 1

    Plak de JSON

    Eén voorbeeld is voldoende. Meerdere voorbeelden verbeteren de inferentie van nullbaarheid en van de typen van array-elementen.

  2. 2

    Kies de stijl

    System.Text.Json (.NET 6+) of Newtonsoft.Json (legacy). Eigenschapsnamen in PascalCase met `[JsonPropertyName]` voor JSON in camelCase.

  3. 3

    Kies de doel-C#-versie

    C# 10+ voor records en bestandsgebonden naamruimten, C# 8 voor nullbare referentietypen of een oudere versie voor maximale compatibiliteit.

  4. 4

    Kopieer de klassen

    Eén hoofdklasse plus geneste klassen voor elke objectvorm, alles in één bestand dat je direct in je project kunt opnemen.

Voorbeelduitvoer

Voor de invoer:

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

Uitvoer van 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!;
}

Typetoewijzing

JSON C#-type
tekenreeks string
geheel getal int (of long voor > int.MaxValue)
getal (decimaal) double (of decimal indien gekozen)
booleaans bool
null object? (of samengevoegd met een naastgelegen veld)
ISO-8601-datum DateTime (of DateOnly)
tekenreeks in GUID-vorm Guid
array van tekenreeksen List<string>
object Geneste klasse

Attribuutopties

  • System.Text.Json ([JsonPropertyName("foo")]), aanbevolen voor .NET 6+ en nieuwe projecten.
  • Newtonsoft.Json ([JsonProperty("foo")]), voor legacy-projecten of wanneer je functies nodig hebt die specifiek zijn voor Newtonsoft.
  • Geen, de eigenschapsnamen komen exact overeen met de JSON-sleutels (werkt alleen als de JSON-sleutels al in PascalCase staan).

Veelvoorkomende fouten

  • int gebruiken voor een veld dat kan overlopen. Als je JSON waarden bevat die groter zijn dan int.MaxValue, gebruik dan long. De generator schakelt automatisch op wanneer hij grote waarden ziet.
  • [JsonIgnore] vergeten voor berekende eigenschappen. Als je hulp-eigenschappen aan de gegenereerde klasse toevoegt, voorzie ze dan van [JsonIgnore], anders worden ze bij het serialiseren mee weggeschreven.
  • Cultuuronafhankelijke parsing vergeten. decimal-velden horen te worden gedeserialiseerd met CultureInfo.InvariantCulture; System.Text.Json doet dit standaard, Newtonsoft via globale instellingen.
  • De generator vertrouwen op basis van één voorbeeld. Nullbaarheid en de typen van array-elementen worden afgeleid uit wat de generator ziet. Controleer nullbare annotaties altijd tegen het werkelijke gedrag van je API.

Veelgestelde vragen

Gebruik voor nieuwe projecten op .NET 6+ System.Text.Json, het is sneller, ingebouwd en ondersteunt nu vrijwel elke functie die Newtonsoft heeft. Gebruik Newtonsoft voor legacy-projecten of wanneer je specifieke functies nodig hebt (aangepaste contract resolvers, JObject, dynamische verwerking).

Records zijn idiomatisch voor onveranderlijke DTO’s in C# 10+. Ze bieden gelijkheid op waarde en een beknopte syntaxis. Klassen zijn beter wanneer je mutatie of compatibiliteit met oudere code nodig hebt. De tool laat je zelf kiezen.

Als je project nullbare referentietypen gebruikt (C# 8+), worden velden die in een voorbeeld als null zijn waargenomen string?, int?, enzovoort. Zonder nullbare referentietypen wordt nullbaarheid alleen aangegeven voor waardetypen (bijvoorbeeld int?).

Gemengde arrays met verschillende objectvormen zijn niet rechtstreeks te representeren in sterk getypeerd C#. De tool leidt een gemeenschappelijke basisklasse af of gebruikt (als terugval) object; voor gemengde arrays kun je de JSON meestal beter opnieuw ontwerpen.

Gerelateerde tools

Tool beschikbaar in andere talen