Generador de clases C# desde JSON

Pega una respuesta de API en JSON y obtén los tipos de C# para deserializarla. Elige clases con propiedades get/set o records posicionales, y deja activados los atributos [JsonPropertyName] para que las propiedades en PascalCase coincidan exactamente con las claves JSON en System.Text.Json.

Generar

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo se usa

  1. Pega un ejemplo de JSON realista: cuantos más elementos tenga un array, mejor se detectan las claves opcionales.
  2. Elige clases o records y si quieres atributos [JsonPropertyName].
  3. Copia el código a un archivo .cs. El tipo raíz se llama Root; cámbiale el nombre según tu proyecto.

Cómo funciona

El ejemplo se convierte en una «forma»: cada clave con todos los tipos que aparecen en ella. Todos los objetos de un array se fusionan en una clase, así que una clave que solo está en algunos pasa a admitir null.

  • Los nombres de propiedad van en PascalCase a partir de la clave: order_id → OrderId, first-name → FirstName, 2fa → N2fa.
  • Una propiedad no puede llamarse como su clase, por eso la clave item dentro de la clase Item pasa a ItemValue.
  • Los nombres de clase también salen de las claves: items contiene List, customer pasa a Customer. Root va primero y las clases anidadas después.
  • Si el nivel superior es un array, un comentario indica el tipo para deserializar, por ejemplo List.

Ejemplo

{"items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} como clases sin atributos da:

using System.Collections.Generic;

public class Root
{
    public List<Item> Items { get; set; } = new();
}

public class Item
{
    public string Sku { get; set; } = "";
    public string? Note { get; set; }
    public long? Qty { get; set; }
}

note vale null una vez, así que es string?. qty falta en el segundo elemento, así que es long?.

Consejos

  • Revisa los números que tuvieron suerte en el ejemplo: un precio de 24 en todos los elementos da long, aunque los datos reales tengan 24,99.
  • Deserializa con JsonSerializer.Deserialize<Root>(json); para un array de nivel superior usa el tipo del comentario.
  • Para otros lenguajes, mira JSON a Java, JSON a TypeScript y JSON a Go.

Preguntas frecuentes

¿Cómo se traducen los tipos de JSON a C#?

Las cadenas pasan a string, true y false a bool, los enteros a long y los demás números a double (una mezcla de ambos da double). Los arrays pasan a List<T>, los objetos a clases propias, y un lugar con valores de distinto tipo pasa a object?.

¿Cuándo una propiedad admite null?

Cuando el ejemplo tiene null en ese lugar o cuando la clave falta en algunos objetos de un array. Los tipos de valor llevan ? (long?, bool?), y los de referencia también (string?, List<T>?), como piden los nullable reference types, activados por defecto en los proyectos .NET nuevos.

¿Por qué hay inicializadores como = "" y = new()?

En una clase, una cadena, lista u objeto anidado que no admite null no debe quedar en null, o el compilador avisa (CS8618). Por eso las cadenas empiezan vacías y las listas y objetos con new().

¿Necesito los atributos?

System.Text.Json compara los nombres distinguiendo mayúsculas por defecto, así que la propiedad OrderId no coincide con la clave order_id. [JsonPropertyName("order_id")] fija la correspondencia. Sin atributos, configura PropertyNamingPolicy o PropertyNameCaseInsensitive en JsonSerializerOptions.

¿Qué versión de C# necesito?

Los records y new() requieren C# 9 (.NET 5) o posterior; las anotaciones de null, C# 8. Los records posicionales se deserializan con System.Text.Json a través de su constructor.

Más en Desarrollo

Todas las herramientas de la categoría: Desarrollo ·Actualizado el 4 de noviembre de 2026

Opciones de privacidad

Google Analytics nos muestra qué herramientas se usan y si funcionan. Puede usar cookies. Tu elección se guarda en este navegador.