JSON to C# Class

C#-Klassen aus JSON generieren

Beispiel ausprobieren
Name der Root-Klasse:

JSON-Eingabe

C#-Ausgabe

Läuft lokal · Sicher zum Einfügen von Secrets
C#-Klassen erscheinen hier…

Was ist die JSON-zu-C#-Konvertierung?

Die JSON-zu-C#-Konvertierung ist der Prozess, bei dem aus JSON-Daten typsichere C#-Klassendefinitionen erzeugt werden. Wenn eine .NET-Anwendung JSON von einer API, einer Konfigurationsdatei oder einer Message Queue empfängt, benötigt sie C#-Klassen, um diese Daten in Objekte zu deserialisieren. Diese Klassen von Hand zu schreiben ist mühsam und fehleranfällig – besonders wenn das JSON verschachtelte Objekte, Arrays und gemischte Typen enthält.

Ein JSON-zu-C#-Klassengenerator analysiert die Struktur und die Werte in deinem JSON, leitet den passenden C#-Typ für jedes Feld ab und erzeugt Klassendefinitionen mit Property-Accessoren und Serialisierungsattributen. Die Ausgabe folgt den .NET-Namenskonventionen: PascalCase-Eigenschaftsnamen, JsonPropertyName-Attribute zur Zuordnung zu den ursprünglichen camelCase- oder snake_case-JSON-Schlüsseln sowie korrekter Einsatz von List'<'T'>' für Arrays.

Diese Konvertierung ist besonders in ASP.NET Core Web-APIs, Azure Functions und allen .NET-Diensten verbreitet, die externe JSON-Daten verarbeiten. Statt dynamic oder Dictionary'<'string, object'>' zu verwenden, bieten typisierte Klassen Typsicherheit zur Kompilierzeit, IntelliSense-Unterstützung und Schutz vor Tippfehlern bei Feldnamen, die sonst erst zur Laufzeit auffallen würden. Füge dein JSON in dieses Tool ein und erhalte sofort einsatzbereite C#-Klassen.

Warum einen JSON-zu-C#-Generator verwenden?

C#-Modellklassen manuell aus JSON-Beispielen zu schreiben kostet Zeit und führt zu menschlichen Fehlern. Ein Generator übernimmt die repetitiven Aufgaben, damit du dich auf die Geschäftslogik konzentrieren kannst.

Sofortige Klassengenerierung
JSON einfügen und in unter einer Sekunde vollständige C#-Klassen erhalten. Kein manuelles Eintippen von Properties, kein Vergessen von Feldern.
🔒
Datenschutz im Vordergrund
Die gesamte Konvertierung läuft im Browser. Deine JSON-Daten verlassen niemals deinen Rechner – API-Schlüssel, Tokens und personenbezogene Daten bleiben privat.
📋
Korrekte Attributzuordnung
Generierte Klassen enthalten JsonPropertyName-Attribute, die PascalCase-C#-Properties auf die ursprünglichen JSON-Schlüsselnamen abbilden und Deserialisierungsfehler verhindern.
🌐
Kein Account und keine Installation nötig
Seite öffnen und JSON einfügen. Keine NuGet-Pakete zu installieren, keine Visual-Studio-Extensions zu konfigurieren, keine Anmeldeformulare.

Anwendungsfälle für JSON-zu-C#

Backend-API-Integration
Request- und Response-Modelle für externe REST-APIs generieren. Das Beispiel-JSON aus der API-Dokumentation einfügen und sofort einsatzbereite C#-Klassen für HttpClient-Aufrufe erhalten.
ASP.NET Core Controller
Modellklassen für Action-Method-Parameter erstellen. Wenn ein Endpoint einen JSON-Body akzeptiert, ermöglicht die generierte Klasse automatisches Model Binding und Validierung.
Azure Functions & Serverless
Input- und Output-Bindings für Azure Functions erstellen, die JSON-Nachrichten aus Queues, Event Hubs oder HTTP-Triggern verarbeiten.
Konfigurations-Deserialisierung
appsettings.json-Abschnitte oder externe Konfigurationsdateien in typisierte C#-Options-Klassen umwandeln, die mit IOptions'<'T'>' in der Dependency Injection verwendet werden.
Datenbank-Seeding & Migration
JSON-Fixture-Dateien in C#-Objekte für Entity Framework Seed-Daten, Integrationstests oder Datenmigrationsskripte umwandeln.
C#-Typsysteme erlernen
Studenten und .NET-Einsteiger können sehen, wie JSON-Typen auf C#-Typen abgebildet werden, Property-Accessoren verstehen und anhand von Beispielen über Serialisierungsattribute lernen.

JSON-zu-C#-Typzuordnung: Referenz

Jeder JSON-Wertetyp wird auf einen bestimmten C#-Typ abgebildet. Der Generator analysiert die tatsächlichen Werte, um den präzisesten Typ zu wählen. Eine JSON-Zahl ohne Dezimalstelle wird beispielsweise zu int, während 3.14 zu double wird. Null-Werte ergeben object? (nullable Referenztyp), da der eigentliche Typ aus null allein nicht abgeleitet werden kann.

JSON-TypBeispielC#-Typ
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
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 verfügt über zwei wichtige JSON-Serialisierungsbibliotheken. Die von diesem Tool generierten Klassen verwenden System.Text.Json-Attribute (JsonPropertyName), die integrierte Option seit .NET Core 3.0. Falls dein Projekt Newtonsoft.Json verwendet, kannst du die Attribute einfach austauschen.

System.Text.Json
Seit .NET Core 3.0 in .NET integriert. Schneller und speichereffizienter als Newtonsoft. Verwendet [JsonPropertyName] für die Property-Zuordnung. Die Standardwahl für neue .NET 6+-Projekte. Unterstützt nicht alle Newtonsoft-Funktionen wie JsonPath oder Reference-Handling out of the box.
Newtonsoft.Json
Die ursprüngliche .NET-JSON-Bibliothek (Json.NET). Verwendet [JsonProperty] für die Property-Zuordnung. Unterstützt fortgeschrittenere Szenarien: polymorphe Serialisierung, JsonPath-Abfragen und flexible benutzerdefinierte Konverter. Noch weit verbreitet in Legacy-Codebasen und Projekten, die Funktionen benötigen, die System.Text.Json fehlen.

Code-Beispiele

Diese Beispiele zeigen, wie C#-Klassen, die aus JSON generiert wurden, definiert und verwendet werden – mit beiden wichtigen Serialisierungsbibliotheken sowie der automatisierten Generierung über die Kommandozeile.

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; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

Häufig gestellte Fragen

Was ist der Unterschied zwischen JsonPropertyName und JsonProperty?
JsonPropertyName ist das Attribut aus System.Text.Json, dem eingebauten .NET-Serializer. JsonProperty stammt aus Newtonsoft.Json (Json.NET), einer Drittanbieterbibliothek. Beide ordnen einen C#-Eigenschaftsnamen einem JSON-Feldnamen zu, gehören aber zu unterschiedlichen Namespaces und sind nicht austauschbar. Verwende JsonPropertyName für neue .NET 6+-Projekte und JsonProperty, wenn dein Projekt bereits von Newtonsoft abhängt.
Wie behandelt der Generator verschachtelte JSON-Objekte?
Jedes verschachtelte Objekt wird zu einer eigenen C#-Klasse. Die Property in der übergeordneten Klasse verwendet die verschachtelte Klasse als Typ. Enthält dein JSON beispielsweise ein Feld "address" mit einem Objekt, das "street" und "city" enthält, erstellt der Generator eine Address-Klasse und typisiert die Property in der übergeordneten Klasse als Address.
Was passiert bei JSON-Arrays mit gemischten Typen?
Der Generator leitet den Array-Elementtyp aus dem ersten Nicht-null-Element ab. Enthält das Array gemischte Typen (Strings und Zahlen zusammen), fällt der generierte Typ auf List'<'object'>' zurück. In der Praxis mischen gut strukturierte API-Antworten selten Typen innerhalb eines einzelnen Arrays.
Kann ich die generierten Klassen mit Entity Framework verwenden?
Ja, aber du musst EF-spezifische Annotationen wie [Key], [Required] oder [Column]-Attribute hinzufügen. Die generierten Klassen liefern dir die Property-Struktur; behandle sie als Grundgerüst und füge die EF-Konfiguration darüber hinzu. EF erwartet außerdem einen parameterlosen Konstruktor, den die generierten Klassen standardmäßig bereits besitzen.
Wie werden Null-Werte in JSON nach C# konvertiert?
Ein JSON-Null-Wert ergibt den Typ object?, da der Generator den beabsichtigten Typ aus null allein nicht bestimmen kann. Nach der Generierung solltest du object? durch den korrekten nullable Typ (string?, int? oder eine bestimmte Klasse?) ersetzen, basierend auf deiner Kenntnis des API-Schemas.
Wird camelCase-JSON automatisch auf PascalCase-C#-Properties abgebildet?
Ja. Der Generator konvertiert JSON-Schlüssel wie "firstName" in PascalCase-Properties wie FirstName und fügt ein [JsonPropertyName("firstName")]-Attribut hinzu. Dadurch ordnet der Serializer die beiden Namenskonventionen bei der Serialisierung und Deserialisierung automatisch einander zu.
Wie gehe ich mit JSON mit optionalen Feldern in C# um?
Mache den Property-Typ nullable (z. B. string? oder int?) und setze einen Standardwert. Mit System.Text.Json kannst du außerdem JsonSerializerOptions.DefaultIgnoreCondition konfigurieren, um Null-Werte bei der Serialisierung zu überspringen. Der Generator erzeugt standardmäßig nicht-nullable Typen – überprüfe und passe die Nullability daher anhand deines API-Vertrags an.