JSON till C#-klass

Klistra in ett JSON-exempel och få C#-POCO-klasser redo att klistras in i en .cs-fil. Verktyget väljer lämpliga typer, hanterar nästlade objekt med ytterligare klassdefinitioner, stöder nullbara referenstyper och genererar antingen System.Text.Json- eller Newtonsoft.Json-attribut beroende på ditt projekt.

Så konverterar du JSON till C#

  1. 1

    Klistra in JSON

    Ett enda exempel räcker. Flera exempel förbättrar inferensen av nullbarhet och array-elementens typer.

  2. 2

    Välj stil

    System.Text.Json (.NET 6+) eller Newtonsoft.Json (äldre). Egenskapsnamn i PascalCase med `[JsonPropertyName]` för JSON i camelCase.

  3. 3

    Välj mål-C#-version

    C# 10+ för poster och filomfångade namnrymder, C# 8 för nullbara referenstyper eller äldre versioner för maximal kompatibilitet.

  4. 4

    Kopiera klasserna

    En rotklass plus nästlade klasser för varje objektform, allt i en enda fil redo att läggas in i ditt projekt.

Exempel på utdata

För indatan:

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

System.Text.Json-utdata (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!;
}

Typmappning

JSON C#-typ
sträng string
heltal int (eller long för > int.MaxValue)
tal (decimal) double (eller decimal om valt)
booleskt värde bool
null object? (eller sammanslaget med angränsande fält)
ISO-8601-datum DateTime (eller DateOnly)
sträng i GUID-form Guid
array av strängar List<string>
objekt Nästlad klass

Attributalternativ

  • System.Text.Json ([JsonPropertyName("foo")]), att föredra för .NET 6+ och nya projekt.
  • Newtonsoft.Json ([JsonProperty("foo")]), för äldre projekt eller när du behöver funktioner som är specifika för Newtonsoft.
  • Inget, egenskapsnamnen matchar JSON-nycklarna exakt (fungerar bara om JSON-nycklarna redan är i PascalCase).

Vanliga misstag

  • Att använda int för ett fält som kan spilla över. Om ditt JSON har värden som överstiger int.MaxValue, använd long. Generatorn uppgraderar automatiskt när den ser stora värden.
  • Att glömma [JsonIgnore] för beräknade egenskaper. Om du lägger till hjälpegenskaper i den genererade klassen, dekorera dem med [JsonIgnore], annars serialiseras de vid utmatning.
  • Att glömma kulturoberoende parsning. decimal-fält bör deserialiseras med CultureInfo.InvariantCulture; System.Text.Json gör detta som standard, Newtonsoft med globala inställningar.
  • Att lita på generatorn utifrån ett enda exempel. Nullbarhet och array-elementens typer gissas utifrån det generatorn ser. Kontrollera alltid nullbara annoteringar mot ditt API:s faktiska beteende.

Vanliga frågor

För nya projekt på .NET 6+ använd System.Text.Json, den är snabbare, inbyggd och stöder nu nästan alla funktioner som Newtonsoft har. Använd Newtonsoft för äldre projekt eller när du behöver dess specifika funktioner (anpassade contract resolvers, JObject, dynamisk hantering).

Poster (records) är idiomatiska för oföränderliga DTO:er i C# 10+. De ger likhet baserad på värde och koncis syntax. Klasser är bättre när du behöver föränderlighet eller kompatibilitet med äldre kod. Verktyget låter dig välja endera.

Om ditt projekt använder nullbara referenstyper (C# 8+) blir fält som observerats som null i något exempel string?, int? och så vidare. Utan nullbara referenstyper signaleras nullbarhet endast för värdetyper (t.ex. int?).

Blandade arrayer med olika objektformer går inte att representera direkt i starkt typat C#. Verktyget härleder en gemensam basklass eller (som reserv) object; för blandade arrayer vill du oftast göra om JSON-strukturen.

Relaterade verktyg

Verktyget finns på andra språk