JSON a clases de C#

Pega un JSON y obtén clases o records de C# con propiedades, colecciones List<T> y tipos anulables. Los atributos JsonPropertyName o JsonProperty conservan las claves originales del JSON.

Gratis y privado. Todo funciona en tu navegador y no se sube nada.

Cómo funciona

  1. Pega tu JSONPega una respuesta de tu API o abre un archivo .json. Con Ejemplo ves un caso de muestra.
  2. Ajusta las opcionesIndica el nombre del tipo principal y las opciones de este lenguaje. El código se actualiza mientras escribes.
  3. Copia o descargaCopia el código en tu proyecto o descárgalo como archivo.

Listo para System.Text.Json y Newtonsoft

Las propiedades se escriben en PascalCase. System.Text.Json distingue mayúsculas y minúsculas en los nombres de propiedad por defecto, así que el generador añade un atributo JsonPropertyName siempre que el nombre en C# sea distinto de la clave. Con Newtonsoft.Json, que no distingue mayúsculas, el atributo solo se añade cuando el nombre cambia de verdad, por ejemplo de user_name a UserName.

Los campos opcionales y null pasan a tipos anulables como int? o string?, lo que encaja con proyectos que tienen activados los tipos de referencia anulables. Los textos y listas obligatorios pueden empezar con un valor vacío para que el compilador no avise. Los enteros por encima del rango de 32 bits pasan a long, y las fechas ISO a DateTime, o a DateTimeOffset cuando llevan zona horaria.

Preguntas frecuentes

¿Class o record?

Los records ofrecen igualdad por valor y propiedades init, algo que encaja con los objetos de transferencia de datos. Las clases con get y set son la opción clásica y funcionan con cualquier serializador y con versiones antiguas de .NET.

¿Se sube mi JSON a algún sitio?

No. Los tipos se generan en tu navegador. Las respuestas de API con datos de clientes o claves nunca salen de tu dispositivo.

¿Cómo se detectan los campos opcionales?

Si el JSON contiene una lista de objetos, se comparan todos. Un campo que falta en al menos un objeto se marca como opcional. Con un solo objeto, todos los campos se tratan como obligatorios.

¿Qué pasa con los campos que siempre son null?

Con el ejemplo no se puede saber su tipo, así que el campo recibe un tipo general como unknown, object, Any o JsonElement. Añade un ejemplo en el que el campo tenga un valor para obtener un tipo preciso.

¿Por qué mi 1.0 aparece como número decimal?

La herramienta mira cómo está escrito el número. 1.0 o 2.5 pasan a ser double o float, 1 pasa a ser un entero. Si un campo es entero en unos elementos y decimal en otros, se usa el tipo decimal.

¿Puedo usar el resultado en código de producción?

Sí, el código compila tal cual en las configuraciones habituales. Revisa nombres y tipos antes de hacer commit, porque un ejemplo nunca puede mostrar todos los valores posibles.

¿Funciona sin conexión?

Sí. Después de abrir la página una vez, sigue funcionando sin conexión a internet.