Konwersja JSON do C# to proces generowania silnie typowanych definicji klas C# z danych JSON. Gdy aplikacja .NET odbiera JSON z API, pliku konfiguracyjnego lub kolejki wiadomości, potrzebuje klas C# do deserializacji tych danych do obiektów. Ręczne pisanie tych klas jest żmudne i podatne na błędy, szczególnie gdy JSON zawiera zagnieżdżone obiekty, tablice i typy mieszane.
Generator klas C# z JSON analizuje strukturę i wartości w Twoim JSON, wnioskuje odpowiedni typ C# dla każdego pola i produkuje definicje klas z akcesory właściwości oraz atrybutami serializacji. Wyjście przestrzega konwencji nazewniczych .NET: nazwy właściwości w PascalCase, atrybuty JsonPropertyName do mapowania na oryginalne klucze JSON w camelCase lub snake_case, oraz poprawne użycie List'<'T'>' dla tablic.
Ta konwersja jest szczególnie powszechna w ASP.NET Core web API, Azure Functions i każdym serwisie .NET konsumującym zewnętrzne dane JSON. Zamiast używać dynamic lub Dictionary'<'string, object'>', typowane klasy zapewniają bezpieczeństwo podczas kompilacji, obsługę IntelliSense i ochronę przed literówkami w nazwach pól, które w przeciwnym razie ujawniłyby się dopiero w czasie działania. Wklej swój JSON do tego narzędzia i natychmiast otrzymaj gotowe do użycia klasy C#.
Dlaczego warto używać generatora JSON do C#?
Ręczne pisanie klas modeli C# z próbek JSON zajmuje czas i wprowadza błędy ludzkie. Generator przejmuje powtarzalne części, dzięki czemu możesz skupić się na logice biznesowej.
⚡
Natychmiastowe generowanie klas
Wklej swój JSON i otrzymaj kompletne klasy C# w mniej niż sekundę. Żadnego ręcznego wpisywania właściwości, żadnego pomijania pól.
🔒
Przetwarzanie z zachowaniem prywatności
Cała konwersja odbywa się w przeglądarce. Twoje dane JSON nigdy nie opuszczają Twojego urządzenia, więc klucze API, tokeny i dane osobowe pozostają prywatne.
📋
Poprawne mapowanie atrybutów
Wygenerowane klasy zawierają atrybuty JsonPropertyName, które mapują właściwości C# w PascalCase na oryginalne nazwy kluczy JSON, zapobiegając niezgodnościom deserializacji.
🌐
Bez konta i instalacji
Otwórz stronę i wklej swój JSON. Żadnych pakietów NuGet do zainstalowania, żadnych rozszerzeń Visual Studio do skonfigurowania, żadnych formularzy rejestracyjnych.
Przypadki użycia JSON do C#
Integracja z backendowym API
Generuj modele żądań i odpowiedzi dla zewnętrznych REST API. Wklej przykładowy JSON z dokumentacji API i otrzymaj gotowe klasy C# do wywołań HttpClient.
Kontrolery ASP.NET Core
Twórz klasy modeli dla parametrów metod akcji. Gdy Twój endpoint przyjmuje ciało JSON, wygenerowana klasa zapewnia automatyczne wiązanie modelu i walidację.
Azure Functions i Serverless
Buduj powiązania wejściowe i wyjściowe dla Azure Functions przetwarzających wiadomości JSON z kolejek, event hub lub wyzwalaczy HTTP.
Deserializacja konfiguracji
Konwertuj sekcje appsettings.json lub zewnętrzne pliki konfiguracyjne na typowane klasy opcji C# do użycia z IOptions'<'T'>' w iniekcji zależności.
Wypełnianie i migracja baz danych
Przekształcaj pliki JSON z danymi testowymi w obiekty C# do wypełniania danych Entity Framework, konfiguracji testów integracyjnych lub skryptów migracji danych.
Nauka systemu typów C#
Studenci i programiści dopiero poznający .NET mogą zobaczyć, jak typy JSON mapują się na typy C#, zrozumieć akcesory właściwości i nauczyć się atrybutów serializacji na przykładach.
Tabela mapowania typów JSON do C#
Każdy typ wartości JSON mapuje się na konkretny typ C#. Generator analizuje rzeczywiste wartości, aby wybrać najbardziej precyzyjny typ. Na przykład liczba JSON bez przecinka dziesiętnego staje się int, podczas gdy 3.14 staje się double. Wartości null produkują object? (typ referencyjny dopuszczający null), ponieważ rzeczywistego typu nie można wywnioskować wyłącznie z null.
Typ JSON
Przykład
Typ 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 a Newtonsoft.Json
.NET ma dwie główne biblioteki serializacji JSON. Wygenerowane klasy z tego narzędzia używają atrybutów System.Text.Json (JsonPropertyName), które są wbudowaną opcją od .NET Core 3.0. Jeśli Twój projekt używa Newtonsoft.Json, możesz zamienić atrybuty.
System.Text.Json
Wbudowany w .NET od Core 3.0. Szybszy i zajmujący mniej pamięci niż Newtonsoft. Używa [JsonPropertyName] do mapowania właściwości. Domyślny wybór dla nowych projektów .NET 6+. Nie obsługuje wszystkich funkcji Newtonsoft, takich jak JsonPath czy obsługa referencji, bez dodatkowej konfiguracji.
Newtonsoft.Json
Oryginalna biblioteka JSON dla .NET (Json.NET). Używa [JsonProperty] do mapowania właściwości. Obsługuje bardziej zaawansowane scenariusze: serializację polimorficzną, zapytania JsonPath, niestandardowe konwertery z większą elastycznością. Nadal powszechna w starszych bazach kodu i projektach potrzebujących funkcji, których brakuje System.Text.Json.
Przykłady kodu
Te przykłady pokazują, jak definiować i używać klas C# wygenerowanych z JSON, z użyciem obu głównych bibliotek serializacji, a także jak zautomatyzować generowanie z wiersza poleceń.
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; }
// }
Jaka jest różnica między JsonPropertyName a JsonProperty?
JsonPropertyName to atrybut z System.Text.Json, wbudowanego serializatora .NET. JsonProperty pochodzi z Newtonsoft.Json (Json.NET), biblioteki zewnętrznej. Oba mapują nazwę właściwości C# na nazwę pola JSON, ale należą do różnych przestrzeni nazw i nie są zamienne. Używaj JsonPropertyName dla nowych projektów .NET 6+ i JsonProperty, jeśli Twój projekt już zależy od Newtonsoft.
Jak generator obsługuje zagnieżdżone obiekty JSON?
Każdy zagnieżdżony obiekt staje się własną klasą C#. Właściwość w klasie nadrzędnej używa zagnieżdżonej klasy jako swojego typu. Na przykład, jeśli Twój JSON ma pole "address" zawierające obiekt z "street" i "city", generator tworzy klasę Address i typuje właściwość jako Address w klasie nadrzędnej.
Co się dzieje z tablicami JSON zawierającymi typy mieszane?
Generator wnioskuje typ elementu tablicy na podstawie pierwszego elementu innego niż null. Jeśli tablica zawiera typy mieszane (ciągi i liczby razem), wygenerowany typ cofa się do List'<'object'>'. W praktyce dobrze ustrukturyzowane odpowiedzi API rzadko mieszają typy w jednej tablicy.
Czy mogę używać wygenerowanych klas z Entity Framework?
Tak, ale będziesz musiał dodać adnotacje specyficzne dla EF, takie jak atrybuty [Key], [Required] lub [Column]. Wygenerowane klasy dają Ci strukturę właściwości — traktuj je jako szkielet i dodaj konfigurację EF na wierzchu. EF oczekuje też konstruktora bezparametrowego, który wygenerowane klasy mają już domyślnie.
Jak wartości null w JSON są konwertowane do C#?
Wartość null w JSON produkuje typ object?, ponieważ generator nie może określić zamierzonego typu wyłącznie z null. Po wygenerowaniu powinieneś zastąpić object? poprawnym typem dopuszczającym null (string?, int? lub konkretną klasą?) na podstawie Twojej wiedzy o schemacie API.
Czy JSON w camelCase jest automatycznie mapowany na właściwości C# w PascalCase?
Tak. Generator konwertuje klucze JSON takie jak "firstName" na właściwości PascalCase jak FirstName i dodaje atrybut [JsonPropertyName("firstName")]. Zapewnia to, że serializator automatycznie mapuje między dwiema konwencjami nazewniczymi podczas serializacji i deserializacji.
Jak obsługiwać JSON z opcjonalnymi polami w C#?
Ustaw typ właściwości jako dopuszczający null (np. string? lub int?) i ustaw wartość domyślną. Z System.Text.Json możesz też skonfigurować JsonSerializerOptions.DefaultIgnoreCondition, aby pomijać wartości null podczas serializacji. Generator domyślnie produkuje typy niedopuszczające null, więc przejrzyj i dostosuj dopuszczalność null na podstawie kontraktu Twojego API.