La conversión de JSON a C# es el proceso de generar definiciones de clases C# fuertemente tipadas a partir de datos JSON. Cuando una aplicación .NET recibe JSON de una API, un archivo de configuración o una cola de mensajes, necesita clases C# para deserializar esos datos en objetos. Escribir estas clases a mano es tedioso y propenso a errores, especialmente cuando el JSON contiene objetos anidados, arrays y tipos mixtos.
Un generador de clases C# a partir de JSON inspecciona la estructura y los valores de tu JSON, infiere el tipo C# adecuado para cada campo y produce definiciones de clases con accesores de propiedades y atributos de serialización. La salida sigue las convenciones de nomenclatura de .NET: nombres de propiedades en PascalCase, atributos JsonPropertyName para mapear a las claves JSON originales en camelCase o snake_case, y uso correcto de List'<'T'>' para arrays.
Esta conversión es especialmente habitual en APIs web de ASP.NET Core, Azure Functions y cualquier servicio .NET que consuma datos JSON externos. En lugar de usar dynamic o Dictionary'<'string, object'>', las clases tipadas ofrecen seguridad en tiempo de compilación, soporte de IntelliSense y protección frente a errores tipográficos en nombres de campo que de otro modo solo aparecerían en tiempo de ejecución. Pega tu JSON en esta herramienta y obtén clases C# listas para usar al instante.
¿Por qué usar un generador de JSON a C#?
Escribir clases de modelo C# a mano a partir de ejemplos JSON lleva tiempo y puede introducir errores humanos. Un generador se encarga de las partes repetitivas para que puedas centrarte en la lógica de negocio.
⚡
Generación instantánea de clases
Pega tu JSON y obtén clases C# completas en menos de un segundo. Sin escribir propiedades a mano, sin olvidar ningún campo.
🔒
Procesamiento con privacidad garantizada
Toda la conversión se ejecuta en tu navegador. Tus datos JSON nunca salen de tu equipo, por lo que las claves de API, tokens y datos personales permanecen privados.
📋
Mapeo correcto de atributos
Las clases generadas incluyen atributos JsonPropertyName que mapean las propiedades C# en PascalCase a los nombres de clave JSON originales, evitando errores de deserialización.
🌐
Sin cuenta ni instalación
Abre la página y pega tu JSON. No hay paquetes NuGet que instalar, ni extensiones de Visual Studio que configurar, ni formularios de registro.
Casos de uso de JSON a C#
Integración con APIs de backend
Genera modelos de solicitud y respuesta para APIs REST de terceros. Pega el JSON de ejemplo de la documentación de la API y obtén clases C# listas para usar en llamadas con HttpClient.
Controladores de ASP.NET Core
Crea clases de modelo para los parámetros de los métodos de acción. Cuando tu endpoint acepta un cuerpo JSON, la clase generada te proporciona enlace y validación automáticos del modelo.
Azure Functions y serverless
Construye enlaces de entrada y salida para Azure Functions que procesan mensajes JSON de colas, event hubs o desencadenadores HTTP.
Deserialización de configuración
Convierte secciones de appsettings.json o archivos de configuración externos en clases de opciones C# tipadas para usar con IOptions'<'T'>' en inyección de dependencias.
Carga inicial y migración de base de datos
Transforma archivos JSON de fixtures en objetos C# para datos semilla de Entity Framework, configuraciones de tests de integración o scripts de migración de datos.
Aprendizaje del sistema de tipos de C#
Los estudiantes y desarrolladores nuevos en .NET pueden ver cómo se mapean los tipos JSON a tipos C#, entender los accesores de propiedades y aprender sobre los atributos de serialización con ejemplos concretos.
Referencia de mapeo de tipos JSON a C#
Cada tipo de valor JSON se mapea a un tipo C# específico. El generador analiza los valores reales para elegir el tipo más preciso. Por ejemplo, un número JSON sin punto decimal se convierte en int, mientras que 3.14 se convierte en double. Los valores null producen object? (tipo de referencia nullable), ya que el tipo real no puede inferirse a partir de null por sí solo.
Tipo JSON
Ejemplo
Tipo C#
string
"hello"
string
number (int)
42
int
number (float)
3.14
double
boolean
true, false
bool
null
null
object?
object
{"key": "value"}
nested class
array
[1, 2, 3]
List<int>
array of objects
[{"id": 1}]
List<ClassName>
System.Text.Json vs Newtonsoft.Json
.NET cuenta con dos bibliotecas principales de serialización JSON. Las clases generadas por esta herramienta usan atributos de System.Text.Json (JsonPropertyName), que es la opción integrada desde .NET Core 3.0. Si tu proyecto usa Newtonsoft.Json, puedes sustituir los atributos.
System.Text.Json
Integrado en .NET desde Core 3.0. Más rápido y con menor uso de memoria que Newtonsoft. Usa [JsonPropertyName] para el mapeo de propiedades. La opción predeterminada para proyectos nuevos en .NET 6+. No soporta de serie todas las funcionalidades de Newtonsoft, como JsonPath o el manejo de referencias.
Newtonsoft.Json
La biblioteca JSON original de .NET (Json.NET). Usa [JsonProperty] para el mapeo de propiedades. Soporta escenarios más avanzados: serialización polimórfica, consultas JsonPath y conversores personalizados con mayor flexibilidad. Sigue siendo habitual en bases de código antiguas y proyectos que necesitan características no disponibles en System.Text.Json.
Ejemplos de código
Estos ejemplos muestran cómo definir y usar clases C# generadas a partir de JSON, con ambas bibliotecas principales de serialización, y cómo automatizar la generación desde la línea de comandos.
C# (System.Text.Json)
using System.Text.Json;
var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"
public class User
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("active")]
public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;
var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98
public class User
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("scores")]
public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs
// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp
// Output:
// public class Root
// {
// [JsonPropertyName("id")]
// public int Id { get; set; }
//
// [JsonPropertyName("name")]
// public string Name { get; set; }
// }
¿Cuál es la diferencia entre JsonPropertyName y JsonProperty?
JsonPropertyName es el atributo de System.Text.Json, el serializador integrado de .NET. JsonProperty pertenece a Newtonsoft.Json (Json.NET), una biblioteca de terceros. Ambos mapean el nombre de una propiedad C# a un campo JSON, pero pertenecen a espacios de nombres diferentes y no son intercambiables. Usa JsonPropertyName en proyectos nuevos con .NET 6+ y JsonProperty si tu proyecto ya depende de Newtonsoft.
¿Cómo gestiona el generador los objetos JSON anidados?
Cada objeto anidado se convierte en su propia clase C#. La propiedad en la clase padre usa la clase anidada como tipo. Por ejemplo, si tu JSON tiene un campo "address" que contiene un objeto con "street" y "city", el generador crea una clase Address y tipifica la propiedad como Address en la clase padre.
¿Qué ocurre con los arrays JSON que contienen tipos mixtos?
El generador infiere el tipo de los elementos del array a partir del primer elemento no nulo. Si el array contiene tipos mixtos (cadenas y números juntos), el tipo generado cae en List'<'object'>'. En la práctica, las respuestas de API bien estructuradas raramente mezclan tipos dentro de un mismo array.
¿Puedo usar las clases generadas con Entity Framework?
Sí, pero necesitarás agregar anotaciones específicas de EF como los atributos [Key], [Required] o [Column]. Las clases generadas te proporcionan la estructura de propiedades; tratalas como un andamiaje y añade la configuración de EF encima. EF también espera un constructor sin parámetros, que las clases generadas ya tienen por defecto.
¿Cómo se convierten los valores null de JSON en C#?
Un valor null en JSON produce el tipo object? porque el generador no puede determinar el tipo previsto a partir de null por sí solo. Tras la generación, debes reemplazar object? por el tipo nullable correcto (string?, int? o una clase específica?) según tu conocimiento del esquema de la API.
¿Se mapea automáticamente el JSON en camelCase a propiedades C# en PascalCase?
Sí. El generador convierte claves JSON como "firstName" en propiedades PascalCase como FirstName y añade el atributo [JsonPropertyName("firstName")]. Esto garantiza que el serializador mapee entre las dos convenciones de nomenclatura de forma automática durante la serialización y deserialización.
¿Cómo gestiono JSON con campos opcionales en C#?
Declara el tipo de la propiedad como nullable (por ejemplo, string? o int?) y asigna un valor predeterminado. Con System.Text.Json, también puedes configurar JsonSerializerOptions.DefaultIgnoreCondition para omitir valores null durante la serialización. El generador produce tipos no nullable por defecto, así que revisa y ajusta la nullabilidad según el contrato de tu API.