JSON para Classe C#

Gere classes C# a partir de JSON

Experimente um exemplo
Nome da classe raiz:

Entrada JSON

Saída C#

Roda localmente · Seguro para colar segredos
As classes C# aparecerão aqui…

O que é a Conversão de JSON para C#?

A conversão de JSON para C# é o processo de gerar definições de classes C# fortemente tipadas a partir de dados JSON. Quando uma aplicação .NET recebe JSON de uma API, arquivo de configuração ou fila de mensagens, ela precisa de classes C# para desserializar esses dados em objetos. Escrever essas classes manualmente é tedioso e sujeito a erros, especialmente quando o JSON contém objetos aninhados, arrays e tipos mistos.

Um gerador de classes C# a partir de JSON inspeciona a estrutura e os valores do seu JSON, infere o tipo C# adequado para cada campo e produz definições de classes com acessores de propriedade e atributos de serialização. A saída segue as convenções de nomenclatura do .NET: nomes de propriedades em PascalCase, atributos JsonPropertyName para mapeamento com as chaves JSON originais em camelCase ou snake_case, e uso correto de List'<'T'>' para arrays.

Essa conversão é especialmente comum em APIs web ASP.NET Core, Azure Functions e qualquer serviço .NET que consuma dados JSON externos. Em vez de usar dynamic ou Dictionary'<'string, object'>', classes tipadas oferecem segurança em tempo de compilação, suporte ao IntelliSense e proteção contra erros de digitação em nomes de campos que só apareceriam em tempo de execução. Cole seu JSON nesta ferramenta e obtenha classes C# prontas para uso instantaneamente.

Por que usar um Gerador de JSON para C#?

Escrever classes de modelo C# manualmente a partir de exemplos JSON consome tempo e introduz erros humanos. Um gerador cuida das partes repetitivas para que você possa se concentrar na lógica de negócio.

Geração instantânea de classes
Cole seu JSON e obtenha classes C# completas em menos de um segundo. Sem digitação manual de propriedades, sem esquecer nenhum campo.
🔒
Processamento com privacidade em primeiro lugar
Toda a conversão ocorre no seu navegador. Seus dados JSON nunca saem da sua máquina, então chaves de API, tokens e dados pessoais permanecem privados.
📋
Mapeamento correto de atributos
As classes geradas incluem atributos JsonPropertyName que mapeiam propriedades C# em PascalCase para os nomes de chave JSON originais, evitando incompatibilidades na desserialização.
🌐
Sem conta ou instalação necessária
Abra a página e cole seu JSON. Sem pacotes NuGet para instalar, sem extensões do Visual Studio para configurar, sem formulários de cadastro.

Casos de Uso de JSON para C#

Integração com APIs de Backend
Gere modelos de requisição e resposta para APIs REST de terceiros. Cole o JSON de exemplo da documentação da API e obtenha classes C# prontas para chamadas com HttpClient.
Controllers ASP.NET Core
Crie classes de modelo para parâmetros de métodos de ação. Quando seu endpoint aceita um body JSON, a classe gerada oferece binding e validação automáticos de modelo.
Azure Functions e Serverless
Construa bindings de entrada e saída para Azure Functions que processam mensagens JSON de filas, event hubs ou HTTP triggers.
Desserialização de Configuração
Converta seções do appsettings.json ou arquivos de configuração externos em classes de opções C# tipadas para uso com IOptions'<'T'>' na injeção de dependência.
Seed e Migração de Banco de Dados
Transforme arquivos de fixture JSON em objetos C# para dados de seed do Entity Framework, configurações de testes de integração ou scripts de migração de dados.
Aprendendo o Sistema de Tipos do C#
Estudantes e desenvolvedores iniciando com .NET podem ver como os tipos JSON se mapeiam para tipos C#, entender acessores de propriedade e aprender sobre atributos de serialização com exemplos práticos.

Referência de Mapeamento de Tipos JSON para C#

Cada tipo de valor JSON é mapeado para um tipo C# específico. O gerador analisa os valores reais para escolher o tipo mais preciso. Por exemplo, um número JSON sem ponto decimal se torna int, enquanto 3.14 se torna double. Valores nulos produzem object? (tipo de referência anulável), pois o tipo real não pode ser inferido apenas a partir de null.

Tipo JSONExemploTipo C#
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
object{"key": "value"}nested class
array[1, 2, 3]List<int>
array of objects[{"id": 1}]List<ClassName>

System.Text.Json vs Newtonsoft.Json

O .NET possui duas grandes bibliotecas de serialização JSON. As classes geradas por esta ferramenta usam atributos do System.Text.Json (JsonPropertyName), que é a opção integrada desde o .NET Core 3.0. Se o seu projeto usa Newtonsoft.Json, você pode trocar os atributos.

System.Text.Json
Integrado ao .NET desde o Core 3.0. Mais rápido e com menor alocação de memória do que o Newtonsoft. Usa [JsonPropertyName] para mapeamento de propriedades. A escolha padrão para novos projetos .NET 6+. Não suporta todos os recursos do Newtonsoft, como JsonPath ou tratamento de referências, por padrão.
Newtonsoft.Json
A biblioteca JSON original do .NET (Json.NET). Usa [JsonProperty] para mapeamento de propriedades. Suporta cenários mais avançados: serialização polimórfica, consultas JsonPath, conversores personalizados com mais flexibilidade. Ainda comum em bases de código legadas e projetos que precisam de recursos que o System.Text.Json não oferece.

Exemplos de Código

Estes exemplos mostram como definir e usar classes C# geradas a partir de JSON, utilizando as duas principais bibliotecas de serialização, além de como automatizar a geração pela linha de comando.

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; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

Perguntas Frequentes

Qual é a diferença entre JsonPropertyName e JsonProperty?
JsonPropertyName é o atributo do System.Text.Json, o serializador integrado do .NET. JsonProperty é do Newtonsoft.Json (Json.NET), uma biblioteca de terceiros. Ambos mapeiam o nome de uma propriedade C# para o nome de um campo JSON, mas pertencem a namespaces diferentes e não são intercambiáveis. Use JsonPropertyName em novos projetos .NET 6+ e JsonProperty se o seu projeto já depende do Newtonsoft.
Como o gerador trata objetos JSON aninhados?
Cada objeto aninhado se torna uma classe C# própria. A propriedade na classe pai usa a classe aninhada como seu tipo. Por exemplo, se o seu JSON tem um campo "address" contendo um objeto com "street" e "city", o gerador cria uma classe Address e tipifica a propriedade como Address na classe pai.
O que acontece com arrays JSON que contêm tipos mistos?
O gerador infere o tipo dos elementos do array a partir do primeiro elemento não nulo. Se o array contém tipos mistos (strings e números juntos), o tipo gerado cai para List'<'object'>'. Na prática, respostas de API bem estruturadas raramente misturam tipos dentro de um único array.
Posso usar as classes geradas com o Entity Framework?
Sim, mas você precisará adicionar anotações específicas do EF, como atributos [Key], [Required] ou [Column]. As classes geradas fornecem a estrutura de propriedades; trate-as como um scaffold e adicione a configuração do EF por cima. O EF também espera um construtor sem parâmetros, que as classes geradas já possuem por padrão.
Como os valores nulos do JSON são convertidos para C#?
Um valor JSON null produz o tipo object? porque o gerador não consegue determinar o tipo pretendido apenas a partir de null. Após a geração, você deve substituir object? pelo tipo anulável correto (string?, int? ou uma classe específica?) com base no seu conhecimento do schema da API.
O JSON em camelCase é mapeado automaticamente para propriedades C# em PascalCase?
Sim. O gerador converte chaves JSON como "firstName" para propriedades em PascalCase como FirstName e adiciona o atributo [JsonPropertyName("firstName")]. Isso garante que o serializador faça o mapeamento entre as duas convenções de nomenclatura automaticamente durante a serialização e desserialização.
Como lidar com JSON com campos opcionais em C#?
Torne o tipo da propriedade anulável (por exemplo, string? ou int?) e defina um valor padrão. Com o System.Text.Json, você também pode configurar JsonSerializerOptions.DefaultIgnoreCondition para ignorar valores nulos durante a serialização. O gerador produz tipos não anuláveis por padrão, portanto revise e ajuste a anulabilidade com base no contrato da sua API.