JSON zu TypeScript- / C#-Typen

Erzeugt TypeScript-Interfaces oder C#-Klassen aus einem JSON-Beispiel und erkennt dabei verschachtelte Typen sowie optionale und nullbare Felder.

Wird geladen…

So funktioniert es

  1. Fügen Sie ein JSON-Beispiel (z. B. eine API-Antwort) in das Feld ein.
  2. Wählen Sie unter „Ausgabe“ TypeScript interface oder C# class.
  3. Geben Sie den „Name des Wurzeltyps“ für den obersten Typ ein (leer bedeutet Root). Ist das JSON ein Array, werden die Elemente zu einem Typ aus diesem Namen plus Item, etwa RootItem.
  4. Der Code wird während der Eingabe aktualisiert. Jedes verschachtelte Objekt wird ein eigener Typ, benannt nach seinem Schlüssel in PascalCase; Objekte in einem Array erhalten einen Namen im Singular (aus items wird Item).
  5. Mit „Kopieren“ übernehmen Sie den Code. Ist die Eingabe kein gültiges JSON, erscheint „Ungültiges JSON“ mit der Meldung des Parsers.

Häufige Fragen

Wird mein JSON an einen Server gesendet?
Nein. Die Typen werden im Browser erzeugt.
Wie werden optionale und nullbare Felder bestimmt?
Objekte im selben Array werden zu einem Typ zusammengeführt. Ein Feld, das in einigen davon fehlt, ist optional (in TypeScript ein ? nach dem Namen, in C# ein nullbarer Typ), und ein Feld, das im Beispiel irgendwo null ist, erhält in TypeScript | null und in C# ein ?.
Welche Zahlentypen werden verwendet?
TypeScript verwendet für alle Zahlen number. In C# werden Ganzzahlen zu int, Ganzzahlen außerhalb des int-Bereichs (±2147483647) zu long und Zahlen mit Nachkommastellen zu double; mischt ein Feld diese Fälle, wird der größte Typ verwendet. 1.0 gilt im JSON als Ganzzahl.
Was passiert mit gemischten Arrays, leeren Arrays und Feldern, die nur null sind?
In TypeScript werden unterschiedliche Werte zu einer Union wie string | number, ein gemischtes Array also zu (string | number)[]. C# kennt keine Unions und verwendet object. Ein leeres Array wird zu unknown[] bzw. List<object>, ein Feld, das immer null ist, zu null bzw. object?.
Wie werden C#-Eigenschaftsnamen gebildet?
JSON-Schlüssel werden in PascalCase umgewandelt (aus user_id wird UserId). Weicht der Eigenschaftsname vom Schlüssel ab, bewahrt ein [JsonPropertyName]-Attribut für System.Text.Json den ursprünglichen Schlüssel; in TypeScript bleiben Schlüssel, die keine gültigen Bezeichner sind, in Anführungszeichen.