JSON to C# Class

Generování tříd C# z JSON

Zkusit příklad
Název kořenové třídy:

Vstup JSON

Výstup C#

Běží lokálně · Bezpečné pro vkládání tajných údajů
Třídy C# se zobrazí zde…

Co je převod JSON na C#?

Převod JSON na C# je proces generování silně typovaných definic tříd C# z dat JSON. Když aplikace .NET přijme JSON z API, konfiguračního souboru nebo fronty zpráv, potřebuje třídy C# pro deserializaci těchto dat do objektů. Ruční psaní těchto tříd je zdlouhavé a náchylné k chybám, zvláště pokud JSON obsahuje vnořené objekty, pole a různé typy.

Generátor tříd C# z JSON prozkoumá strukturu a hodnoty vašeho JSON, odvodí odpovídající typ C# pro každé pole a vytvoří definice tříd s přístupovými vlastnostmi a atributy serializace. Výstup respektuje konvence pojmenování .NET: názvy vlastností v PascalCase, atributy JsonPropertyName pro mapování na původní klíče JSON v camelCase nebo snake_case a správné použití List'<'T'>' pro pole.

Tento převod je obzvláště běžný ve webových API ASP.NET Core, Azure Functions a jakékoli službě .NET, která konzumuje externí data JSON. Místo použití dynamic nebo Dictionary'<'string, object'>' vám typované třídy poskytují bezpečnost při kompilaci, podporu IntelliSense a ochranu před překlepy v názvech polí, které by se jinak projevily až za běhu. Vložte svůj JSON do tohoto nástroje a získejte třídy C# připravené k použití okamžitě.

Proč použít generátor JSON na C#?

Ruční psaní modelových tříd C# ze vzorků JSON je časově náročné a přináší lidské chyby. Generátor zvládá opakující se části, takže se můžete soustředit na business logiku.

Okamžité generování tříd
Vložte svůj JSON a získejte kompletní třídy C# za méně než sekundu. Žádné ruční zadávání vlastností, žádné zapomenuté pole.
🔒
Zpracování s důrazem na soukromí
Veškerý převod probíhá ve vašem prohlížeči. Vaše data JSON nikdy neopustí váš počítač, takže klíče API, tokeny a osobní údaje zůstanou soukromé.
📋
Správné mapování atributů
Vygenerované třídy obsahují atributy JsonPropertyName, které mapují vlastnosti C# v PascalCase na původní názvy klíčů JSON a zabraňují neshodám při deserializaci.
🌐
Nevyžaduje účet ani instalaci
Otevřete stránku a vložte svůj JSON. Žádné balíčky NuGet k instalaci, žádná rozšíření Visual Studio ke konfiguraci, žádné registrační formuláře.

Případy použití JSON na C#

Integrace backend API
Generujte modely požadavků a odpovědí pro REST API třetích stran. Vložte ukázkový JSON z dokumentace API a získejte třídy C# připravené k použití pro volání HttpClient.
Kontrolery ASP.NET Core
Vytvářejte modelové třídy pro parametry metod akcí. Když váš endpoint přijímá tělo JSON, vygenerovaná třída vám poskytne automatické vázání modelu a validaci.
Azure Functions a serverless
Vytvářejte vstupní a výstupní vazby pro Azure Functions, které zpracovávají zprávy JSON z front, event hubů nebo HTTP triggerů.
Deserializace konfigurace
Převádějte sekce appsettings.json nebo externí konfigurační soubory na typované třídy možností C# pro použití s IOptions'<'T'>' v dependency injection.
Naplňování a migrace databáze
Převádějte soubory JSON fixtures na objekty C# pro počáteční data Entity Framework, nastavení integračních testů nebo skripty pro migraci dat.
Studium typového systému C#
Studenti a vývojáři začínající s .NET mohou sledovat, jak se typy JSON mapují na typy C#, porozumět přístupovým vlastnostem a naučit se o atributech serializace na příkladech.

Referenční tabulka mapování typů JSON na C#

Každý typ hodnoty JSON se mapuje na konkrétní typ C#. Generátor analyzuje skutečné hodnoty, aby zvolil nejpřesnější typ. Například číslo JSON bez desetinné tečky se stane int, zatímco 3.14 se stane double. Hodnoty null produkují object? (typ s možnou hodnotou null), protože skutečný typ nelze odvodit pouze z hodnoty null.

Typ JSONPříkladTyp 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

.NET má dvě hlavní knihovny pro serializaci JSON. Vygenerované třídy z tohoto nástroje používají atributy System.Text.Json (JsonPropertyName), což je vestavěná možnost od .NET Core 3.0. Pokud váš projekt používá Newtonsoft.Json, můžete atributy vyměnit.

System.Text.Json
Zabudováno do .NET od verze Core 3.0. Rychlejší a s nižší spotřebou paměti než Newtonsoft. Používá [JsonPropertyName] pro mapování vlastností. Výchozí volba pro nové projekty .NET 6+. Nepodporuje všechny funkce Newtonsoft, jako je JsonPath nebo zpracování referencí, přímo z krabice.
Newtonsoft.Json
Původní .NET JSON knihovna (Json.NET). Používá [JsonProperty] pro mapování vlastností. Podporuje pokročilejší scénáře: polymorfní serializaci, dotazy JsonPath, vlastní konvertory s větší flexibilitou. Stále rozšířená ve starších kódových základnách a projektech, které potřebují funkce, které System.Text.Json postrádá.

Příklady kódu

Tyto příklady ukazují, jak definovat a používat třídy C# vygenerované z JSON, s využitím obou hlavních serializačních knihoven, a také jak automatizovat generování z příkazové řádky.

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))

Často kladené otázky

Jaký je rozdíl mezi JsonPropertyName a JsonProperty?
JsonPropertyName je atribut ze System.Text.Json, vestavěného serializátoru .NET. JsonProperty pochází z Newtonsoft.Json (Json.NET), knihovny třetí strany. Obě mapují název vlastnosti C# na název pole JSON, ale patří do různých jmenných prostorů a nejsou zaměnitelné. Používejte JsonPropertyName pro nové projekty .NET 6+ a JsonProperty, pokud váš projekt již závisí na Newtonsoft.
Jak generátor zpracovává vnořené objekty JSON?
Každý vnořený objekt se stane vlastní třídou C#. Vlastnost v nadřazené třídě používá vnořenou třídu jako svůj typ. Například pokud váš JSON obsahuje pole "address" s objektem obsahujícím "street" a "city", generátor vytvoří třídu Address a zadá vlastnost jako Address v nadřazené třídě.
Co se stane s poli JSON obsahujícími různé typy?
Generátor odvozuje typ prvků pole z prvního prvku, který není null. Pokud pole obsahuje různé typy (řetězce a čísla dohromady), vygenerovaný typ se vrátí na List'<'object'>'. V praxi dobře strukturované odpovědi API jen zřídka kombinují typy v rámci jednoho pole.
Mohu vygenerované třídy použít s Entity Framework?
Ano, ale budete muset přidat anotace specifické pro EF, jako jsou atributy [Key], [Required] nebo [Column]. Vygenerované třídy vám poskytují strukturu vlastností; zacházejte s nimi jako se scaffoldem a přidejte konfiguraci EF na vrch. EF také očekává konstruktor bez parametrů, který vygenerované třídy již mají ve výchozím nastavení.
Jak jsou hodnoty null v JSON převedeny na C#?
Hodnota null v JSON produkuje typ object?, protože generátor nemůže určit zamýšlený typ pouze z hodnoty null. Po vygenerování byste měli nahradit object? správným typem s možnou hodnotou null (string?, int? nebo konkrétní třídou?) na základě vaší znalosti schématu API.
Je camelCase JSON automaticky mapován na vlastnosti C# v PascalCase?
Ano. Generátor převádí klíče JSON jako "firstName" na vlastnosti PascalCase jako FirstName a přidává atribut [JsonPropertyName("firstName")]. Tím je zajištěno, že serializátor automaticky mapuje mezi oběma konvencemi pojmenování během serializace a deserializace.
Jak v C# zpracovat JSON s nepovinnými poli?
Nastavte typ vlastnosti jako typ s možnou hodnotou null (např. string? nebo int?) a nastavte výchozí hodnotu. Se System.Text.Json můžete také nakonfigurovat JsonSerializerOptions.DefaultIgnoreCondition pro přeskočení hodnot null během serializace. Generátor ve výchozím nastavení produkuje typy bez možné hodnoty null, proto zkontrolujte a upravte možnost hodnoty null podle vaší API smlouvy.