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
- Pega un JSON de ejemplo (por ejemplo, una respuesta de API) en el cuadro.
- En Salida, elige TypeScript interface o C# class.
- 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.
- 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).
- 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.