JSON a Clase C#

Pega un ejemplo de JSON y obtén clases POCO en C# listas para pegar en un archivo .cs. Selecciona tipos sensatos, maneja objetos anidados con definiciones de clase adicionales, soporta tipos de referencia anulables y emite atributos de System.Text.Json o Newtonsoft.Json dependiendo de tu proyecto.

Cómo convertir JSON a C#

  1. 1

    Pega el JSON

    Un solo ejemplo es suficiente. Múltiples ejemplos mejoran la inferencia de tipos anulables y de elementos de arreglos.

  2. 2

    Elige el estilo

    System.Text.Json (.NET 6+) o Newtonsoft.Json (legado). Nombres de propiedades en PascalCase con `[JsonPropertyName]` para JSON en camelCase.

  3. 3

    Elige la versión de C# objetivo

    C# 10+ para registros y espacios de nombres con alcance de archivo, C# 8 para tipos de referencia anulables, o versiones anteriores para máxima compatibilidad.

  4. 4

    Copia las clases

    Una clase raíz más clases anidadas para cada forma de objeto, todo en un archivo listo para agregar a tu proyecto.

Ejemplo de salida

Para la entrada:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

Salida de System.Text.Json (C# 10+):

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

    [JsonPropertyName("emails")]
    public List<string> Emails { get; set; } = new();

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

Mapeo de tipos

JSON Tipo C#
string string
integer int (o long para > int.MaxValue)
number (decimal) double (o decimal si se opta)
boolean bool
null object? (o fusionado con hermano)
fecha ISO-8601 DateTime (o DateOnly)
cadena con forma de GUID Guid
arreglo de cadenas List<string>
objeto Clase anidada

Opciones de atributos

  • System.Text.Json ([JsonPropertyName("foo")]), preferido para .NET 6+ y nuevos proyectos.
  • Newtonsoft.Json ([JsonProperty("foo")]), para proyectos heredados o cuando necesitas características específicas de Newtonsoft.
  • Ninguno, los nombres de las propiedades coinciden exactamente con las claves JSON (funciona solo si las claves JSON ya están en PascalCase).

Errores comunes

  • Usar int para un campo que podría desbordarse. Si tu JSON tiene valores que superan int.MaxValue, usa long. El generador promueve automáticamente cuando ve valores grandes.
  • Faltar [JsonIgnore] para propiedades computadas. Si agregas propiedades auxiliares a la clase generada, decóralas con [JsonIgnore] o se serializarán al salir.
  • Olvidar el análisis independiente de la cultura. Los campos decimal deben deserializarse con CultureInfo.InvariantCulture; System.Text.Json lo hace por defecto, Newtonsoft con configuraciones globales.
  • Confiar en el generador con un solo ejemplo. La nulabilidad y los tipos de elementos de arreglos se adivinan de lo que ve. Siempre verifica las anotaciones anulables contra el comportamiento real de tu API.

Preguntas frecuentes

Para nuevos proyectos en .NET 6+, usa System.Text.Json, es más rápido, está integrado y ahora soporta casi todas las características que tiene Newtonsoft. Usa Newtonsoft para proyectos heredados o cuando necesites sus características específicas (resolutores de contrato personalizados, JObject, manejo dinámico).

Los registros son idiomáticos para DTOs inmutables en C# 10+. Te dan igualdad de valor y una sintaxis concisa. Las clases son mejores cuando necesitas mutación o compatibilidad con el legado. La herramienta te permite elegir cualquiera.

Si tu proyecto usa tipos de referencia anulables (C# 8+), los campos observados como nulos en cualquier ejemplo se convierten en string?, int?, etc. Sin NRT, la nulabilidad se señala solo para tipos de valor (por ejemplo, int?).

Los arreglos mixtos de diferentes formas de objeto no son directamente representables en C#. La herramienta infiere una clase base común o (como alternativa) object; para arreglos mixtos generalmente querrás rediseñar el JSON.

Herramientas relacionadas

Herramienta disponible en otros idiomas