logo
GeekFormat

JSON na C#

Darmowe narzędzie online JSON na C#. Konwertuj odpowiedź API lub JSON konfiguracyjny na standardowe klasy C# jednym kliknięciem do bezpośredniego użycia w projektach ASP.NET Core, Unity, Blazor, .NET MAUI. Obsługa adnotacji [JsonProperty], generyków List, Nullable<T>, automatyczny podział zagnieżdżonych klas, pełne lokalne generowanie w przeglądarce.

Powiązane Rekomendacje

Wprowadzenie do JSON na C#: Konwertowanie danych JSON na kompilowalne klasy C# POCO

JSON na C# to proces konwertowania danych w formacie JSON (obiekty lub tablice) na definicje klas C# (POCO, Plain Old CLR Object). C# to główny język ekosystemu .NET, szeroko stosowany w scenariuszach, takich jak backend ASP.NET Core, gry Unity, aplikacje międzyplatformowe .NET MAUI, Blazor WebAssembly, aplikacje desktopowe (WPF/WinForms), usługi chmurowe Azure itp. W procesie tworzenia często wymagane jest przekonwertowanie przykładowego JSON z dokumentacji API lub rzeczywistej odpowiedzi na typy C#, ręczne pisanie klas nie tylko wymaga wiele powtarzalnej pracy, ale także jest podatne na błędy w typach pól i adnotacjach, dlatego to narzędzie ma na celu automatyzację tego procesu.

To narzędzie wykonuje się lokalnie w przeglądarce na podstawie quicktype-core, używa renderera C# do generowania kodu standardowych klas POCO, wyjście domyślnie zawiera using System.Collections.Generic; i adnotacje [JsonProperty("oryginalny klucz")] (tryb kompatybilności z Newtonsoft.Json), można bezpośrednio otworzyć w Visual Studio do kompilacji. To nie jest tylko szkic typów, ale klasa C#, którą można użyć od razu po umieszczeniu w projekcie .NET w połączeniu z pakietem NuGet.

Wnioskowanie typów jest rdzeniem JSON na C#. Narzędzie mapuje podstawowe typy JSON na standardowe typy .NET: ciąg znaków→string, liczba całkowita→long, liczba zmiennoprzecinkowa→double, wartość logiczna→bool, tablica→List<T>, zagnieżdżony obiekt→niezależna klasa, wartość null→Nullable<T> (np. long? / bool? / string?). Dla zagnieżdżonych obiektów narzędzie automatycznie generuje nową klasę dla każdego poziomu i nazywa ją, wielką literą na początku nazwy pola, np. pole address generuje klasę Address, obiekt w tablicy items generuje klasę Item.

Integracja z nowoczesną składnią C#: to narzędzie domyślnie generuje serializowalne POCO (publiczne właściwości { get; set; }). Dla projektów podkreślających niezmienność, programiści mogą zmienić class na typ record C# 9+ i zmienić { get; set; } na właściwości init-only (public string Name { get; init; }), w połączeniu z JsonSerializer.Deserialize<T>(jsonString) można zagwarantować podczas kompilacji, że dane nie zostaną zmienione, co jest zgodne z trendami projektowania niezmiennych encji w ASP.NET Core 7+ Minimal API, Entity Framework Core 8+.

W przeciwieństwie do niektórych narzędzi online wymagających przesłania JSON na serwer do przetwarzania, wszystkie obliczenia tego narzędzia są całkowicie wykonywane w przeglądarce. quicktype-core jest ładowany i wykonywany przez Web Worker, parsowanie JSON, wnioskowanie typów, generowanie kodu C# i pobieranie plików — wszystko odbywa się lokalnie, dane nie są wysyłane na żadne serwery. Jest to szczególnie ważne dla JSON zawierającego klucze API, pola prywatności użytkowników, nieopublikowane struktury biznesowe, po zamknięciu strony dane są usuwane z pamięci.

Należy zauważyć, że automatycznie wygenerowany kod jest punktem wyjścia, a nie punktem końcowym. Narzędzie wnioskuje typy na podstawie przykładowego JSON, nie może określić bardziej dokładnych typów w logice biznesowej (np. typy semantyczne, takie jak URL, Email, ID, wszystkie zostaną wywnioskowane jako string). Dla pól JSON snake_case pola C# zachowują nazewnictwo PascalCase (user_name → UserName), ale adnotacja [JsonProperty] zachowuje oryginalny klucz, automatyczne mapowanie podczas deserializacji. Zaleca się traktowanie wygenerowanego wyniku jako pierwszego szkicu, a następnie dostrojenie nazw pól, typów, atrybutów zgodnie ze specyfikacjami projektu.

Przypadki użycia

  • ASP.NET Core Web API: konwertowanie przykładowego JSON w dokumentacji OpenAPI/Swagger na klasy DTO, w połączeniu z wiązaniem modelu [FromBody] do odbierania żądań z frontendu
  • ASP.NET Core MVC: konwertowanie treści żądania formularza/JSON na Model silnego typu, w połączeniu z automatyczną walidacją ModelState
  • Deserializacja Newtonsoft.Json: konwertowanie JSON odpowiedzi interfejsu trzeciego na klasy POCO z [JsonProperty], nie wymaga ręcznego mapowania pól
  • Wysokowydajne scenariusze System.Text.Json: konwertowanie JSON na typ record lub właściwości init-only, w połączeniu z JsonSerializer.Deserialize<T> w celu zwiększenia szybkości uruchamiania
  • Skrypty gier Unity: konwertowanie JSON zwracanego przez API sieciowe (dane gracza, konfiguracja poziomu, przedmioty sklepu, ranking) na serializowalne modele danych ScriptableObject
  • Aplikacje międzyplatformowe .NET MAUI: konwertowanie JSON z backend API na klasy Model, użycie w wiązaniu danych XAML, współdzielenie modelu biznesowego na iOS/Android/Windows
  • Blazor Server / WebAssembly: konwertowanie JSON z API na parametry komponentów/serwerowe modele silnego typu, w połączeniu z @inject HttpClient do konsumpcji wspólnych typów frontend/backend
  • Entity Framework Core: konwertowanie dokumentów JSON wyeksportowanych z bazy danych na klasy encji, użycie jako podstawowych klas referencyjnych dla migracji modeli EF Core, w połączeniu z adnotacjami danych, takimi jak [Key]/[Required]
  • Azure Functions / AWS Lambda: konwertowanie JSON zdarzeń wyzwalaczy Event Grid/SNS/API Gateway/Cosmos DB na parametry zdarzeń silnego typu, uproszczenie sygnatur bezserwerowych funkcji
  • Komunikacja w czasie rzeczywistym SignalR: konwertowanie komunikatów JSON wysyłanych przez serwer (czat, powiadomienia, notowania, dane IoT) na typy C#, konsumpcja silnego typu w metodach Hub
  • Kontrakty interfejsów mikrousług: konwertowanie przykładowych JSON żądań/odpowiedzi RPC między usługami (gRPC-Web/HTTP/WCF) na klasy C#, użycie jako definicji wspólnych kontraktów między wieloma zespołami
  • Ładowanie plików konfiguracyjnych: konwertowanie podstruktury appsettings.json na klasy szablonu Options (np. MyOptions : IOptions<MyOptions> w połączeniu z IConfiguration.Bind)
  • Przygotowanie danych testowych: konwertowanie fixture JSON na klasy C#, następnie deserializacja za pomocą Newtonsoft/System.Text.Json jako sterownika testów jednostkowych, w połączeniu z xUnit/NUnit/MSTest
  • Parsowanie danych crawlera: konwertowanie danych JSON zebranych przez HtmlAgilityPack/AngleSharp/PuppeteerSharp na klasy C#, unikanie pomijania pól przy dynamicznym dostępie JObject
  • Pisanie dokumentacji API: włączanie przykładów klas C# do definicji schema w dokumentacji Swagger/OpenAPI, ReDoc, Knife4j, Swagger UI w celu zwiększenia czytelności dokumentacji
  • Współpraca przy przeglądzie kodu: bezpośrednie konwertowanie JSON odpowiedzi API na czytelne POCO, ułatwienie dyskusji na temat nazewnictwa pól, wyboru typów, użycia adnotacji podczas Code Review
  • Refaktoryzacja starych projektów: refaktoryzacja dynamicznego dostępu opartego na JObject/Dictionary<string, object> na dostęp silnego typu opartego na POCO, zwiększenie kontroli typów podczas kompilacji i utrzymywalności
  • Edukacja i szkolenia: konwertowanie przykładowego JSON na POCO na kursach C#, szkoleniach wprowadzających .NET do demonstrowania modelowania obiektowego, akcesorów właściwości, zasad serializacji

Jak Używać

  1. Wklej zawartość JSON w edytor po lewej stronie, lub kliknij przycisk przesyłania, aby wybrać plik .json/.txt, lub kliknij przycisk przykładu, aby załadować wbudowane dane
  2. Poczekaj 400 ms na automatyczną konwersję, po prawej stronie wyświetli się wygenerowany kod klasy C# POCO
  3. Jeśli występują błędy formatu JSON, możesz kliknąć przycisk «Napraw JSON», aby automatycznie naprawić typowe problemy składniowe przed ponowną konwersją
  4. Kliknij przycisk «Kopiuj», aby skopiować pojedynczą klasę do schowka i wkleić do Visual Studio/Rider/VS Code, lub kliknij «Pobierz», aby zapisać jako plik .cs

Funkcje

  • Czyste lokalne generowanie w przeglądarce: parsowanie JSON i generowanie kodu C# odbywa się całkowicie w przeglądarce przez JavaScript + quicktype-core, dane wejściowe nie są wysyłane na żadne serwery
  • Dwie formy POCO + record: domyślnie generowane są serializowalne klasy POCO, przełączanie na typ record C# 9+ jednym kliknięciem, zgodne z nowoczesnym stylem kodowania .NET
  • Adnotacje Newtonsoft [JsonProperty]: automatyczne dodawanie [JsonProperty("oryginalny klucz")] dla każdego pola, kompatybilność z domyślnym zachowaniem Newtonsoft.Json, nazwy pól PascalCase nie wpływają na deserializację
  • Automatyczny podział zagnieżdżonych obiektów: zagnieżdżone obiekty JSON rekurencyjnie generują niezależne klasy C#, nazewnictwo według reguły wielkiej litery na początku nazwy pola (np. address → Address), unikanie konfliktów typów
  • Automatyczne rozwijanie generyków List: tablice JSON automatycznie konwertowane na List<T>, T automatycznie wnioskowane z pierwszego elementu tablicy (["a","b"] → List<string>, [{...}] → List<Item>)
  • Automatyczne wnioskowanie Nullable<T>: pola z wartością null w JSON automatycznie oznaczane jako Nullable<T> (np. long? / string? / bool?), zapobieganie wyjątkom odwołania null podczas kompilacji
  • Nazewnictwo pól PascalCase: wejście snake_case automatycznie konwertowane na PascalCase (np. user_name → UserName), jednocześnie adnotacja [JsonProperty] zachowuje oryginalny klucz dla zapewnienia kompatybilności deserializacji
  • Bogate mapowanie typów wartości: string→string, integer→long, float→double, bool→bool, array→List<T>, null→Nullable<T>
  • Pełny szablon .cs: automatyczne generowanie standardowego pliku C# zawierającego using System.Collections.Generic; + namespace + public class + pola + właściwości, możliwość bezpośredniej kompilacji
  • Kopiowanie i pobieranie: kopiowanie pojedynczej klasy do schowka lub pobieranie jako plik .cs jednym kliknięciem, bezpośrednie przeciąganie do Visual Studio / Rider / VS Code do użycia
  • Naprawa błędów JSON jednym kliknięciem: automatyczne naprawianie typowych błędów formatowania, takich jak końcowe przecinki, pojedyncze cudzysłowy, brakujące cudzysłowy, po pomyślnej naprawie kontynuacja generowania kodu C#
  • Lokalna historia: automatyczne zapisywanie ostatnich wejść na podstawie localStorage, szybkie przywracanie po odświeżeniu lub przypadkowym zamknięciu strony w celu kontynuacji edycji

Przykłady kodu

C#: Deserializacja POCO wygenerowanego przez narzędzie za pomocą Newtonsoft.Json

csharp

Najbardziej powszechne użycie w projektach ASP.NET Core: połączenie POCO wygenerowanego przez narzędzie z Newtonsoft.Json do deserializacji odpowiedzi API.

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class ApiClient
{
    private static readonly HttpClient _http = new HttpClient();

    // POCO wygenerowany przez narzędzie:
    public class User
    {
        [JsonProperty("id")]
        public long Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("email")]
        public string Email { get; set; }

        [JsonProperty("is_active")]
        public bool? IsActive { get; set; }
    }

    public static async Task<User> GetUserAsync(int userId)
    {
        // 1) Wywołanie API w celu pobrania ciągu JSON
        var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");

        // 2) Deserializacja do POCO wygenerowanego przez narzędzie
        //    Wewnętrzne automatyczne mapowanie JSON snake_case według adnotacji, takich jak [JsonProperty("id")]
        var user = JsonConvert.DeserializeObject<User>(json);

        Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

C#: Użycie POCO wygenerowanego przez narzędzie w ASP.NET Core Controller do odbierania żądań

csharp

Umieść POCO User wygenerowany przez narzędzie w ASP.NET Core Controller, w połączeniu z [FromBody] automatycznie odbieraj żądania JSON z frontendu.

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

// POCO wygenerowany przez narzędzie (domyślnie używa Newtonsoft [JsonProperty]):
public class CreateOrderRequest
{
    [Newtonsoft.Json.JsonProperty("user_id")]
    public long UserId { get; set; }

    [Newtonsoft.Json.JsonProperty("items")]
    public List<OrderItem> Items { get; set; }
}

public class OrderItem
{
    [Newtonsoft.Json.JsonProperty("product_id")]
    public long ProductId { get; set; }

    [Newtonsoft.Json.JsonProperty("quantity")]
    public long Quantity { get; set; }
}

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create([FromBody] CreateOrderRequest request)
    {
        if (request == null || request.Items == null || !request.Items.Any())
        {
            return BadRequest("Items cannot be empty");
        }

        // Logika biznesowa: zapis zamówienia
        // var order = OrderService.Create(request);

        return Ok(new { order_id = 12345, status = "created" });
    }
}

/*
 * Odpowiednie zależności .csproj:
 * <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
 * <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 */

C#: HttpClient.GetFromJsonAsync + System.Text.Json deserializacja

csharp

Zalecane użycie dla .NET 5+/.NET 7+: użycie wbudowanej metody rozszerzającej System.Text.Json + typu record, w połączeniu z adnotacją [JsonPropertyName].

using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

// Narzędzie domyślnie generuje POCO class; można ręcznie zmienić na typ record (niezmienny obiekt przekazywania danych) w następujący sposób:
public record User
{
    [JsonPropertyName("id")]
    public long Id { get; init; }

    [JsonPropertyName("name")]
    public string Name { get; init; }

    [JsonPropertyName("email")]
    public string Email { get; init; }

    [JsonPropertyName("is_active")]
    public bool? IsActive { get; init; }
}

public class ApiClient
{
    private static readonly HttpClient _http = new HttpClient();

    public static async Task<User> GetUserAsync(int userId)
    {
        // System.Text.Json: GetFromJsonAsync kończy HTTP + deserializację w jednej linii
        var user = await _http.GetFromJsonAsync<User>(
            $"https://api.example.com/users/{userId}");

        System.Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

/*
 * Odpowiednie zależności .csproj (System.Text.Json jest wbudowany, dodatkowa instalacja nie jest wymagana):
 * <TargetFramework>net7.0</TargetFramework>
 *
 * Jeśli projekt jest .NET 7+ i potrzebna jest kompatybilność ze składnią Newtonsoft [JsonProperty],
 * można dodać w Program.cs:
 *   builder.Services.AddControllers()
 *       .AddNewtonsoftJson(options =>
 *       {
 *           options.SerializerSettings.ContractResolver =
 *               new Newtonsoft.Json.Serialization.DefaultContractResolver();
 *       });
 */

Best Practices

Dodaj <Nullable>enable</Nullable> do .csproj, dopuszczające null typy, takie jak string? / List<User>?, wygenerowane przez to narzędzie, automatycznie otrzymają sprawdzanie null podczas kompilacji, zapobiegając awariom czasu wykonania NullReferenceException.

To narzędzie automatycznie konwertuje pola JSON na PascalCase (np. user_name → UserName), jednocześnie adnotacja [JsonProperty] zachowuje oryginalny klucz, zapewniając, że kod jest zgodny z oficjalnymi regułami nazewnictwa .NET, deserializacja nadal działa z oryginalnym kluczem JSON.

Gdy poziom zagnieżdżenia przekracza 4 poziomy, zaleca się podzielenie głównego obiektu na wiele niezależnych POCO, każdy odpowiada za różne obszary biznesowe (np. UserDto / OrderDto / PaymentDto), unikanie jednej ogromnej klasy zawierającej wszystkie pola, zwiększenie utrzymywalności.

Nie używaj POCO wygenerowanych przez to narzędzie jednocześnie jako EF Core Entity i jako API DTO. Zalecenie: ①Warstwa API używa DTO (wygenerowanych z JSON); ②Warstwa EF Core używa Entity (ręcznie dodawane są adnotacje danych, takie jak [Key]/[Required]); ③Używaj AutoMapper/Mapster do mapowania DTO ↔ Entity, unikanie bezpośredniego ujawnienia struktury bazy danych frontendowi.

Jeśli projekt używa System.Text.Json, zaleca się użycie globalnego zastępowania w IDE do zmiany wygenerowanego [JsonProperty("xxx")] na [JsonPropertyName("xxx")]. Lub zachować oryginalny [JsonProperty] + zainstalować pakiet Microsoft.AspNetCore.Mvc.NewtonsoftJson i wywołać AddNewtonsoftJson() w celu kompatybilności ze składnią Newtonsoft.

Wszystkie obliczenia tego narzędzia są wykonywane lokalnie w przeglądarce, ale w przedsiębiorstwie zaleca się dodanie dodatkowej warstwy ochrony: ①Nie kopiuj JSON zawierającego łańcuchy połączeń do produkcyjnej bazy danych/główne klucze API do jakichkolwiek narzędzi online; ②Do wewnętrznego generowania POCO zaleca się użycie NSwag lub Wklej JSON jako klasy Visual Studio do generowania całkowicie w trybie offline; ③Używaj narzędzi online tylko z przykładowymi JSON po zamaskowaniu.

JSON przekraczające 1 MB będą wyświetlane wolno w przeglądarce, zaleca się: ①Podzielić na wiele niezależnych klas POCO (np. User.cs / Address.cs / Order.cs), sklasyfikowanych według modułów biznesowych; ②Dla bardzo dużych JSON Schema (100+ pól) zaleca się użycie NSwag lub wbudowanej funkcji Visual Studio do bezpośredniego generowania; ③To narzędzie używać tylko do przetwarzania małych i średnich odpowiedzi API (<100 pól).

Dla DTO/modeli odpowiedzi niewymagających modyfikacji zaleca się zmianę wygenerowanej class na record C# 9+ i zmianę { get; set; } na { get; init; }, korzyści obejmują: ①Gwarancja podczas kompilacji, że dane nie zostaną zmienione; ②Automatyczne uzyskanie porównania równości wartości (Equals/GetHashCode); ③Uproszczenie kopiowania obiektów w połączeniu z wyrażeniem with.

Często Zadawane Pytania

Jak przekonwertować JSON na klasy C#?

Wklej zawartość JSON w lewe pole wejściowe, narzędzie automatycznie wywoła quicktype-core do wygenerowania klas C# w ciągu 400 ms, po prawej stronie wyświetli się pełny kod. Możesz również kliknąć przycisk «Prześlij», aby wybrać plik .json/.txt, lub kliknąć «Przykład», aby załadować wbudowane dane. Po wygenerowaniu kliknij przycisk «Kopiuj», aby skopiować pojedynczą klasę do schowka lub pobrać jako plik .cs.

Czy wygenerowany kod C# będzie zawierał adnotacje [JsonProperty]?

Tak. Narzędzie domyślnie używa trybu kompatybilności z Newtonsoft.Json, automatycznie dodając atrybut [JsonProperty("oryginalny klucz")] dla każdego pola, zapewniając, że po przekonwertowaniu nazwy pola na PascalCase deserializacja nadal będzie mogła poprawnie mapować oryginalny klucz JSON. Jeśli używasz System.Text.Json, po wygenerowaniu możesz zmienić [JsonProperty] na [JsonPropertyName] (oba mają taką samą semantykę) lub bezpośrednio użyć domyślnej polityki nazewnictwa System.Text.Json ([JsonPropertyName] w System.Text.Json może być również obsługiwane przez niestandardową JsonNamingPolicy).

Czy generować klasy POCO czy typy record?

Domyślnie generowane są serializowalne klasy POCO (zawierające właściwości { get; set; }). Jeśli projekt używa typu record C# 9+ (niezmienne obiekty przekazywania danych, odpowiednie dla DTO/niezmiennych modeli), po wygenerowaniu możesz ręcznie zmienić class na record i zmienić { get; set; } na właściwości init-only (public string Name { get; init; }). Typ record jest szeroko stosowany w ASP.NET Core 7+ Minimal API, Entity Framework Core.

Jakie struktury danych JSON są obsługiwane?

Obsługiwane są wszystkie poprawne struktury JSON: typy podstawowe (null, boolean, number, string), tablice (jednowymiarowe lub wielowymiarowe), zagnieżdżone obiekty (dowolnej głębokości). Główne wejście może być obiektem JSON lub tablicą JSON, obiekt JSON generuje public class Root, tablica JSON generuje public class Root : List<Item>. Nie są obsługiwane natywne wartości JavaScript (funkcje, Symbol, undefined, obiekty Date itp.).

Jak typy pól JSON są mapowane na typy C#?

Ciąg znaków→string, liczba całkowita→long, liczba zmiennoprzecinkowa→double, wartość logiczna→bool, tablica→List<T>, zagnieżdżony obiekt→niezależna klasa, pole z wartością null→Nullable<T> (np. long? / bool? / string?). Szczegółowe reguły mapowania znajdują się w «Tabeli szybkiego odniesienia mapowania typów JSON na typy C#» na dole strony.

Czy pola null automatycznie generują Nullable<T>?

Tak. Narzędzie wykrywa pola jawnie ustawione na null lub brakujące w JSON, automatycznie generuje format Nullable<T> (np. long? Id { get; set; }), co jest zgodne z funkcją Nullable Reference Types (NRT) wprowadzoną w C# 8+, pomagając kompilatorowi wykrywać ryzyka odwołań null podczas analizy statycznej. Uwaga: po włączeniu NRT typy referencyjne domyślnie nie dopuszczają null, należy jawnie oznaczyć string? w celu wskazania możliwości null.

Czy tablice są konwertowane na List<T>?

Tak. Tablice JSON są jednolicie konwertowane na List<T> w C#, typ elementu jest automatycznie wnioskowany z pierwszego elementu tablicy: tablica ciągów→List<string>, tablica liczb całkowitych→List<long>, tablica obiektów→List<Item>. Pusta tablica [] nie może wywnioskować typu elementu, domyślnie generuje List<object>, zaleca się ręczną zmianę na konkretny typ po wygenerowaniu (np. List<MyClass>). Jeśli wolisz składnię tablicy T[], po wygenerowaniu możesz użyć masowego zastępowania w IDE.

Jak obsługiwane są zagnieżdżone obiekty?

Narzędzie generuje niezależną klasę C# dla każdego zagnieżdżonego obiektu, reguła nazewnictwa to wielka litera na początku nazwy pola (np. address → Address). Jeśli główny obiekt zawiera tablicę items, a elementy są obiektami, generowana jest klasa public class Item, a następnie odwołanie public List<Item> Items { get; set; }. Obiekty o tej samej strukturze ponownie używają tego samego typu, unikając powtarzających się definicji.

Czy można dostosować nazwy generowanych klas i przestrzeni nazw?

Tak. quicktype-core domyślnie używa nazwy źródła JSON (np. Root) jako nazwy klasy głównej, po wygenerowaniu możesz ręcznie zmienić nazwy klas, namespace i wszystkie pozycje odwołań. Nazwę pobieranego pliku .cs można również zmienić w razie potrzeby podczas zapisywania (np. zmienić na User.cs, Order.cs).

Czy wygenerowany kod można umieścić bezpośrednio w projekcie .NET do użycia?

Można używać bezpośrednio. Wygenerowany plik to standardowa składnia C#, zawiera odwołanie using System.Collections.Generic., wystarczy umieścić plik .cs w katalogu głównym lub podkatalogu projektu .NET, nie trzeba dodawać dodatkowych zależności do .csproj (System.Text.Json jest wbudowany w .NET; dla Newtonsoft.Json wymagana jest instalacja pakietu Microsoft.AspNetCore.Mvc.NewtonsoftJson lub Newtonsoft.Json przez NuGet). Następnie można użyć JsonConvert.DeserializeObject<T>(jsonString) lub JsonSerializer.Deserialize<T>(jsonString) do deserializacji.

Czy dane są wysyłane na serwer?

Całkowicie lokalne wykonywanie w przeglądarce. Parsowanie JSON, generowanie kodu C# i pobieranie plików są całkowicie wykonywane w przeglądarce przez JavaScript + WebAssembly, wprowadzone dane JSON i wygenerowany kod C# nie są wysyłane na żadne serwery, nie są zapisywane ani buforowane w chmurze. Wrażliwe JSON zawierające klucze API, tokeny, nieopublikowane pola biznesowe również można bezpiecznie używać, zamknięcie strony powoduje usunięcie.

Czy wymagana jest rejestracja lub logowanie?

Nie trzeba. Narzędzie jest całkowicie darmowe, nie wymaga rejestracji, logowania, autoryzacji, otwarcie strony pozwala na natychmiastowe użycie, wszystkie funkcje są dostarczane lokalnie w przeglądarce.

Co zrobić w przypadku błędu formatu JSON?

Narzędzie automatycznie sprawdza poprawność JSON, w przypadku błędu po prawej stronie wyświetla się czerwony komunikat o błędzie i przycisk «Napraw JSON», po kliknięciu można automatycznie naprawić typowe błędy: końcowe przecinki, zamiana pojedynczych cudzysłowów na podwójne, uzupełnianie cudzysłowów dla kluczy bez cudzysłowów, usuwanie komentarzy itp. Po pomyślnej naprawie kontynuowane jest generowanie kodu C#.

Co jest lepsze — Newtonsoft.Json czy System.Text.Json?

Obie są najbardziej podstawowymi bibliotekami JSON w ekosystemie .NET. Newtonsoft.Json (znany również jako Json.NET) ma najdłuższą historię i najbogatszy ekosystem, kompatybilny z praktycznie wszystkimi projektami .NET; System.Text.Json to wysokowydajna biblioteka wbudowana w .NET Core 3.0+, szybkie uruchamianie, niskie zużycie pamięci, przyjazna dla AOT. ASP.NET Core 3.0+ domyślnie używa System.Text.Json; starsze projekty .NET Framework i wiele bibliotek trzecich domyślnie zależą od Newtonsoft.Json. To narzędzie domyślnie generuje [JsonProperty] dla kompatybilności z obiema (System.Text.Json w .NET 7+ obsługuje również pakiet kompatybilności Newtonsoft Microsoft.AspNetCore.Mvc.NewtonsoftJson).

Jaka jest różnica między JSON na Javę, JSON na Rust?

Wszystkie trzy konwertują JSON na definicje typów języka docelowego, ale forma wyjściowa jest różna: JSON na C# generuje klasy POCO z adnotacjami [JsonProperty], może być bezpośrednio używany z Newtonsoft.Json lub System.Text.Json do deserializacji; JSON na Javę generuje POJO z adnotacjami Lombok/Gson/Jackson; JSON na Rust generuje struct z Serde derive. Wszystkie trzy skupiają się na różnych ekosystemach, wybór zależy od stosu technologicznego.

Co zrobić, jeśli deserializacja klasy z polem DateTime kończy się niepowodzeniem?

System.Text.Json domyślnie nie obsługuje automatycznej konwersji między string a DateTime, zgłasza JsonException. Dwa rozwiązania: ①dodanie niestandardowego konwertera [JsonConverter(typeof(DateTimeConverter))] do pola; ②skonfigurowanie globalnego JsonSerializerOptions w Program.cs: options.PropertyNameCaseInsensitive = true; i użycie niestandardowego JsonConverter do obsługi DateTime. Newtonsoft.Json domyślnie obsługuje deserializację DateTime, ale dla specjalnych formatów (np. znaczników czasu Unix) wymagany jest niestandardowy converter.

Dlaczego w wygenerowanych klasach nie ma namespace?

Narzędzie domyślnie nie generuje namespace, aby utrzymywać maksymalną kompatybilność fragmentów kodu, ułatwiając użytkownikom kopiowanie i używanie w dowolnych projektach. Jeśli potrzebujesz namespace, możesz ręcznie dodać namespace YourApp.Models; na górze wygenerowanego kodu i umieścić klasy w odpowiednim pliku .cs. Zaleca się, aby w projektach .NET organizować namespace według modułów funkcjonalnych (np. Models / Dtos / ViewModels / Entities).

Czy w Visual Studio można wkleić jako klasy jednym kliknięciem?

Visual Studio 2019+ ma wbudowaną funkcję «Wklej specjalnie → Wklej JSON jako klasy» (w menu Edycja → Wklej specjalnie), która może bezpośrednio konwertować JSON na klasy C#. Kod wygenerowany przez to narzędzie jest kompatybilny z tą funkcją: po skopiowaniu kodu C# wygenerowanego przez to narzędzie do schowka wklej go do dowolnego pliku .cs, aby użyć. Jeśli wolisz wbudowaną funkcję VS, możesz nie otwierać tego narzędzia, a bezpośrednio użyć Edycja → Wklej specjalnie → Wklej JSON jako klasy.

Rozwiązywanie problemów

Wyświetla się «Proszę wprowadzić dane JSON» lub prawa strona jest pusta

Lewe pole wejściowe jest puste lub zawiera tylko białe znaki, upewnij się, że wklejono poprawną zawartość JSON, lub kliknij przycisk przesyłania, aby wybrać plik .json/.txt, również możesz kliknąć przycisk przykładu, aby załadować wbudowany przykład.

Wyświetla się błąd parsowania JSON

Typowe przyczyny: końcowe przecinki (np. {"a":1,}), użycie pojedynczych cudzysłowów zamiast podwójnych, klucze nie ujęte w podwójne cudzysłowy, zawierają komentarze JavaScript. Kliknięcie przycisku «Napraw JSON» może automatycznie naprawić niektóre błędy; jeśli nadal się nie powiedzie, najpierw sprawdź za pomocą narzędzia formatowania JSON.

Wygenerowane typy pól nie są wystarczająco dokładne

Narzędzie wnioskuje typy na podstawie przykładowego JSON, np. wszystkie liczby całkowite to long, wszystkie ciągi to string. Jeśli potrzebujesz bardziej dokładnych typów (int/decimal/Guid/DateTime), proszę ręcznie zmienić typy pól po wygenerowaniu. System.Text.Json domyślnie nie obsługuje DateTime, wymaga konfiguracji przez [JsonConverter].

Pola null generują Nullable<T>, ale w projekcie nie włączono Nullable Reference Types

Narzędzie domyślnie generuje w formacie Nullable Reference Types C# 8+ (np. string? / List<User>?). Jeśli projekt jest starszej wersji .NET Framework/nie włączono NRT, typy referencyjne domyślnie dopuszczają null, można bezpośrednio usunąć ? z string? (lub włączyć <Nullable>enable</Nullable> w .csproj).

Podczas kompilacji komunikat, że zależność Newtonsoft.Json nie została znaleziona

Proszę dodać następujący PackageReference do .csproj: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> Następnie wykonaj dotnet restore, NuGet automatycznie pobierze. Jeśli używasz System.Text.Json, instalacja nie jest wymagana (wbudowana w .NET).

Pola snake_case JSON nie pasują do nazw pól PascalCase

Narzędzie automatycznie konwertuje nazwy pól JSON na PascalCase (np. user_name → UserName), jednocześnie adnotacja [JsonProperty] zachowuje oryginalny klucz, Newtonsoft.Json będzie mapować po [JsonProperty] podczas deserializacji, ręczna obsługa nie jest wymagana. Jeśli używasz domyślnej polityki nazewnictwa System.Text.Json, musisz zmienić [JsonProperty] na [JsonPropertyName] lub skonfigurować politykę nazewnictwa CamelCase w Program.cs.

Pobrany plik .cs zgłasza błąd kompilacji w projekcie

Możliwe przyczyny: ①W .csproj nie dodano zależności Newtonsoft.Json/System.Text.Json; ②Klasa umieszczona w nieodpowiednim katalogu (należy umieścić w katalogu głównym lub podkatalogu projektu .NET i odpowiadać namespace); ③Nazwa klasy konfliktuje z innymi typami w projekcie. Rozwiązanie: dodaj zależności, dostosuj katalog i namespace, zmień nazwę konfliktującej klasy.

Podczas odbierania JSON w ASP.NET Core pojawia się błąd «Cannot deserialize»

ASP.NET Core 3.0+ domyślnie używa System.Text.Json, ale [JsonProperty] wygenerowany przez narzędzie to składnia Newtonsoft.Json. Dwa rozwiązania: ①Dodaj pakiet Microsoft.AspNetCore.Mvc.NewtonsoftJson do .csproj i wywołaj AddNewtonsoftJson() w Program.cs; ②Zmień wszystkie wygenerowane [JsonProperty("xxx")] na [JsonPropertyName("xxx")] (składnia System.Text.Json).

Tablica jest typem liczbowym, ale generuje List<object>

Zazwyczaj gdy tablica jest pusta [] domyślnie wnioskowana jako List<object>, proszę dodać co najmniej jeden przykładowy element (np. [1,2,3]) do oryginalnego JSON, narzędzie wywnioskuje typ na podstawie pierwszego elementu; lub po wygenerowaniu ręcznie zmień List<object> na List<long>/List<int>.

Podczas konwertowania bardzo dużych JSON strona się zawiesza

Zaleca się podzielenie JSON na wiele niezależnych modułów do oddzielnego konwertowania lub wyodrębnienie tylko części wymagającej modelowania. Przeglądarka będzie zużywać dużo pamięci podczas wyświetlania dużej liczby zagnieżdżonych klas, dla JSON przekraczających 5 MB zaleca się użycie NSwag lub wbudowanej funkcji Visual Studio «Wklej JSON jako klasy».

Słownik

POCO (Plain Old CLR Object)
Skrót od «zwykłego obiektu CLR» w C#/.NET, ograniczenia: publiczny konstruktor domyślny + pola private + publiczne właściwości { get; set; } + brak zależności od frameworka. To, co generuje to narzędzie, to standardowy POCO.
record
Niezmienny typ obiektu przekazywania danych wprowadzony w C# 9+, używa równości wartości zamiast równości odwołań. Po wygenerowaniu w tym narzędziu można ręcznie zmienić na record, odpowiedni dla scenariuszy, takich jak DTO, modele odpowiedzi API, niezmienna konfiguracja.
[JsonProperty]
Atrybut mapowania pól Newtonsoft.Json. To narzędzie domyślnie dodaje [JsonProperty("oryginalny klucz")] dla każdego pola, zapewniając, że nazwy pól PascalCase mogą poprawnie deserializować JSON w snake_case.
Newtonsoft.Json
Znany również jako Json.NET, najpopularniejsza biblioteka JSON w ekosystemie .NET. Ma najbogatszy ekosystem i najlepszą kompatybilność, obsługiwana przez praktycznie wszystkie projekty .NET. Używana domyślnie przed ASP.NET Core 3.0, po 3.0 została zastąpiona przez System.Text.Json, ale nadal może być kompatybilna przez pakiet NuGet.
System.Text.Json
Wysokowydajna biblioteka JSON wbudowana w .NET Core 3.0+. Szybkie uruchamianie, niskie zużycie pamięci, przyjazna dla AOT, zawiera [JsonPropertyName] (odpowiadający [JsonProperty] Newtonsoft) i niestandardową politykę nazewnictwa JsonNamingPolicy.
Nullable<T>
Typ w C# wskazujący, że typ wartości może być null (np. long? / bool?). To narzędzie automatycznie wnioskuje pola null w JSON jako Nullable<T>, aby uniknąć wyjątków odwołania null podczas kompilacji.
List<T>
Generyczny typ listy w frameworku kolekcji .NET. To narzędzie automatycznie konwertuje tablice JSON na List<T>, T jest automatycznie wnioskowane z pierwszego elementu tablicy (np. ["a"] → List<string>).
namespace
Słowo kluczowe przestrzeni nazw w C# do organizowania klas, podobne do package w Javie. Kod wygenerowany przez to narzędzie domyślnie nie ma namespace, można dodać ręcznie (np. namespace MyApp.Models).
ASP.NET Core
Otwarty międzyplatformowy framework webowy Microsoft. Klasy POCO wygenerowane przez to narzędzie mogą być bezpośrednio używane w scenariuszach, takich jak wiązanie modelu [FromBody] ASP.NET Core Controller, Minimal API, parametry komponentów Blazor.
Unity
Najpopularniejszy silnik gier na świecie, język skryptów to C#. Klasy POCO wygenerowane przez to narzędzie mogą być używane do parsowania odpowiedzi API sieciowego Unity, modelowania danych konfiguracyjnych ScriptableObject.
Snake_case → PascalCase
Konwersja reguł nazewnictwa pól. Konwertowanie nazewnictwa snake_case (np. user_name, created_at) na nazewnictwo PascalCase (np. UserName, CreatedAt), zgodnie z oficjalnymi regułami nazewnictwa .NET.
quicktype-core
Podstawowa zależność tego narzędzia — otwarta wielojęzyczna biblioteka generowania typów JSON (projekt quicktype), obsługująca ponad dziesięć języków, w tym C#, Java, TypeScript, Rust, Go, Swift itp., wykonywana w przeglądarce na podstawie TypeScript + WebAssembly.
.NET MAUI
Międzyplatformowy framework UI Microsoft (.NET Multi-platform App UI), kod C# może być współdzielony na iOS/Android/Windows/macOS. POCO wygenerowane przez to narzędzie są odpowiednie jako Model dla wiązania danych XAML w MAUI.
Blazor
Framework SPA Microsoft oparty na WebAssembly, ma dwa tryby: Server i WebAssembly. Klasy C# wygenerowane przez to narzędzie mogą być używane do parametrów komponentów Blazor, modeli odpowiedzi API silnego typu, zwiększania efektywności tworzenia pełnego stosu w jednym języku.
HttpClient.GetFromJsonAsync
Metoda rozszerzająca .NET 5+/System.Net.Http.Json, kończy HTTP GET + deserializację JSON w jednej linii. W połączeniu z POCO wygenerowanymi przez to narzędzie może znacznie uprościć kod klienta API HTTP.
JsonNamingPolicy
Klasa w System.Text.Json sterująca regułami mapowania między nazwami pól JSON a nazwami właściwości C# (np. CamelCase, SnakeCaseLower). Newtonsoft.Json jest implementowany przez adnotację [JsonProperty] lub ContractResolver.
IOptions<T>
Główny interfejs szablonu Options w .NET, wiąże podstrukturę appsettings.json z klasą silnego typu. POCO wygenerowane przez to narzędzie w połączeniu z IConfiguration.Bind mogą być bezpośrednio używane jako implementacja IOptions<T>.

Tabela szybkiego odniesienia mapowania typów JSON na typy C#

Narzędzie automatycznie wnioskuje odpowiednie typy .NET/C# na podstawie typów wartości JSON:

Przykładowa wartość JSONWygenerowany typ C#Format NullableOpis
nullWnioskowanie według kontekstuT?Pola z wartością null automatycznie wnioskowane jako Nullable<T> (np. long? / bool? / string?)
true / falseboolbool?Wartości logiczne JSON bezpośrednio mapowane na bool C#
42longlong?Liczby całkowite JSON domyślnie mapowane na long (64-bitowe liczby całkowite, kompatybilne z dużymi liczbami)
3.14doubledouble?Liczby zmiennoprzecinkowe JSON domyślnie mapowane na double (liczby zmiennoprzecinkowe podwójnej precyzji)
"hello"stringstring?Ciągi znaków JSON mapowane na string C#
["a","b"]List<string>List<string>?Tablice ciągów mapowane na List<string>
[1,2,3]List<long>List<long>?Tablice liczb całkowitych mapowane na List<long>
[{...},{...}]List<Item>List<Item>?Tablice obiektów najpierw generują odpowiednią klasę dla pierwszego elementu, następnie opakowują w List
[]List<object>List<object>?Puste tablice nie mogą wywnioskować typu elementu, domyślnie obniżenie do object, zaleca się ręczną zmianę na konkretny typ po wygenerowaniu
{...} zagnieżdżony obiektniezależna klasaClassName?Zagnieżdżone obiekty generują niezależną klasę, nazewnictwo według reguły wielkiej litery na początku nazwy pola (address → Address)

Tabela porównawcza adnotacji Newtonsoft.Json i System.Text.Json

Porównanie atrybutów mapowania pól dwóch głównych bibliotek JSON w ekosystemie .NET. To narzędzie domyślnie generuje [JsonProperty] kompatybilny z Newtonsoft:

Porównywany elementNewtonsoft.JsonSystem.Text.Json
Atrybut mapowania pól[JsonProperty("user_name")][JsonPropertyName("user_name")]
Domyślna polityka nazewnictwaZachowywanie nazw pól PascalCase (snake_case wymaga [JsonProperty])Zachowywanie oryginalnych nazw pól (dopasowywanie po kluczu JSON, domyślnie CamelCase)
Niestandardowe nazewnictwoWskazywanie po polu przez [JsonProperty][JsonPropertyName] + globalna konfiguracja JsonNamingPolicy
Obsługa wartości nullNullValueHandling.Ignore / IncludeJsonIgnoreCondition.WhenWritingNull
Wbudowana wersja .NET.NET Framework / .NET Core / .NET 5+.NET Core 3.0+ / .NET 5+
Sposób instalacjiNuGet: Newtonsoft.JsonWbudowana (instalacja nie jest wymagana)
WydajnośćŚredniaWysoka (szybkie uruchamianie, niskie zużycie pamięci)
Obsługa AOTWymagany source generatorNatywna obsługa
ZastosowaniaStare projekty .NET, zależności od bibliotek trzecich, bogaty ekosystemASP.NET Core 3.0+, wysokowydajne scenariusze, .NET MAUI / Blazor

Privacy & Security

Wszystkie operacje tego narzędzia JSON na C# są całkowicie wykonywane lokalnie w Twojej przeglądarce: parsowanie JSON, generowanie kodu C# i pobieranie plików — wszystko jest wykonywane po stronie klienta przez JavaScript + WebAssembly (quicktype-core) przeglądarki, zawartość JSON, przesłane pliki lub wygenerowany kod nie są wysyłane na żadne serwery przez sieć. Przesyłanie plików używa natywnego API FileReader przeglądarki do bezpośredniego odczytu do pamięci, nie przechodzi przez żadne usługi pośrednie. Nie używa śledzenia Cookie, nie zbiera danych wejściowych użytkownika ani danych zachowań podczas użytkowania. Po zamknięciu lub odświeżeniu strony cała zawartość wejścia i wyjścia jest automatycznie usuwana z pamięci. Odpowiednie do przetwarzania JSON zawierającego klucze API, tokeny, wrażliwe dane biznesowe.

Authoritative References