JSON a tipos TypeScript / C#

Genera interfaces TypeScript o clases C# a partir de un JSON de ejemplo, infiriendo tipos anidados y campos opcionales y nulables.

Cargando…

Cómo usar

  1. Pega un JSON de ejemplo (por ejemplo, una respuesta de API) en el cuadro.
  2. En Salida, elige TypeScript interface o C# class.
  3. Escribe el Nombre del tipo raíz para el tipo de nivel superior (si lo dejas vacío se usa Root). Si el JSON es un array, sus elementos pasan a ser un tipo con ese nombre más Item, como RootItem.
  4. El código se actualiza mientras escribes. Cada objeto anidado se convierte en un tipo propio con el nombre de su clave en PascalCase, y los objetos dentro de un array reciben un nombre en singular (items pasa a Item).
  5. Pulsa Copiar para copiar el código. Si la entrada no es JSON válido, se muestra JSON no válido junto con el mensaje del analizador.

Preguntas frecuentes

¿Se envía mi JSON a un servidor?
No. Los tipos se generan en tu navegador.
¿Cómo se deciden los campos opcionales y nulables?
Los objetos de un mismo array se combinan en un solo tipo. Un campo que falta en algunos de ellos es opcional (un ? tras el nombre en TypeScript, un tipo nulable en C#), y un campo que vale null en alguna parte del ejemplo recibe | null en TypeScript y ? en C#.
¿Qué tipos numéricos se usan?
TypeScript usa number para todos los números. En C#, los enteros pasan a int, los enteros fuera del rango de int (±2147483647) a long y los números con decimales a double; si un campo los mezcla, se usa el más amplio. Ten en cuenta que 1.0 en JSON cuenta como entero.
¿Qué pasa con arrays mixtos, arrays vacíos y campos que solo son null?
En TypeScript, los valores de distinto tipo forman una unión como string | number, así que un array mixto queda como (string | number)[]. C# no tiene uniones y usa object. Un array vacío pasa a unknown[] o List<object>, y un campo que siempre es null queda como null u object?.
¿Cómo se eligen los nombres de las propiedades en C#?
Las claves JSON se convierten a PascalCase (user_id pasa a UserId). Si el nombre de la propiedad difiere de la clave, un atributo [JsonPropertyName] de System.Text.Json conserva la clave original; en TypeScript, las claves que no son identificadores válidos se mantienen entre comillas.