Convertidor JSON a clases C#
Genera modelos C# para respuestas de APIs.
Área de trabajo
Los tipos se infieren de los valores de ejemplo. Revisa el código antes de usarlo.
Resultado
Tu resultado aparecerá aquí.
¿Qué hace esta herramienta?
Genera definiciones de clases C# a partir de un objeto JSON de muestra. Es un punto de partida para modelos de respuestas de APIs, DTO y pruebas en proyectos .NET. Crea una clase Root, clases para objetos anidados y propiedades con JsonPropertyName para conservar los nombres JSON. El procesamiento ocurre en tu navegador; revisa los tipos antes de usar el código en producción.
Cómo utilizarla
- Pega un objeto JSON válido y representativo de la respuesta que quieres modelar.
- Presiona Generar clases C# y revisa Root, las clases anidadas y los atributos JsonPropertyName.
- Selecciona Copiar resultado y pega las definiciones en un archivo .cs de tu proyecto .NET; ajusta el espacio de nombres según tu proyecto.
- Revisa nulabilidad, colecciones, números y nombres. Inicializa las referencias cuando corresponda y prueba la deserialización con JsonSerializer.
Ejemplos de entrada y salida
Entrada
{"order_id":42,"total":19.95,"customer":{"name":"Ada"},"tags":["paid"],"note":null}Salida
using System.Collections.Generic;
using System.Text.Json.Serialization;
public class Root
{
[JsonPropertyName("order_id")]
public int OrderId { get; set; }
[JsonPropertyName("total")]
public double Total { get; set; }
[JsonPropertyName("customer")]
public Customer Customer { get; set; }
[JsonPropertyName("tags")]
public List<string> Tags { get; set; }
[JsonPropertyName("note")]
public object? Note { get; set; }
}
public class Customer
{
[JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;
}Limitaciones importantes
- Exige un objeto en la raíz; no acepta un arreglo, null ni un valor primitivo como raíz. No lee esquemas ni combina varias muestras.
- Infiere string, bool e int para enteros de 32 bits; los demás números se convierten en double. No detecta decimal, long, fechas, enumeraciones ni GUID a partir de cadenas. El análisis JSON puede perder precisión en números grandes.
- Un valor null genera object?: no permite conocer el tipo real. No infiere propiedades ausentes, campos obligatorios ni la nulabilidad de futuros valores.
- Los arreglos usan solo el primer elemento no nulo para inferir List<T>. Un arreglo vacío o compuesto solo de null genera List<object>; no combina tipos ni propiedades de los demás elementos.
- Las propiedades string se inicializan con string.Empty; las referencias a objetos y listas no se inicializan. Revisa advertencias de referencias anulables, colisiones de nombres y compatibilidad con tu configuración de C#.
Errores comunes
- Pegar JSON inválido o una lista de objetos en la raíz. Selecciona un objeto representativo de la lista para generar el modelo.
- Confiar en que una sola muestra describe todas las variantes de una API.
- Usar double para importes monetarios sin revisar si el contrato necesita decimal.
- Usar las clases generadas sin revisar nulabilidad, nombres, inicialización ni deserialización con datos reales.
Preguntas frecuentes
¿Conserva los nombres originales de las propiedades JSON?
Sí, mediante JsonPropertyName. Los identificadores C# se forman a partir de segmentos alfanuméricos y reciben sufijos cuando es necesario evitar ciertas colisiones. Revisa los nombres antes de integrar el código.
¿Cómo trata objetos anidados y arreglos?
Los objetos anidados generan clases adicionales. Los arreglos generan List<T> a partir del primer elemento no nulo, incluidos objetos anidados; los elementos posteriores no amplían el modelo.
¿Por qué un campo aparece como object?
Un valor null produce object? porque la muestra no revela su tipo. Un arreglo vacío o sin elementos no nulos produce List<object>. Sustituye esos tipos después de revisar el contrato de la API.
¿Puedo pegar el resultado directamente en .NET?
El resultado incluye las directivas using para colecciones y JsonPropertyName, y usa System.Text.Json. Es un borrador de modelo: revisa tipos, nulabilidad y advertencias del compilador, añade tu espacio de nombres y prueba la deserialización.