JSON na klasę C#

Wklej próbkę JSON i otrzymaj z powrotem klasy POCO w C# gotowe do wklejenia do pliku .cs. Dobiera sensowne typy, obsługuje zagnieżdżone obiekty dodatkowymi definicjami klas, wspiera nullowalne typy referencyjne i emituje atrybuty System.Text.Json lub Newtonsoft.Json zależnie od projektu.

Jak przekonwertować JSON na C#

  1. 1

    Wklej JSON

    Jedna próbka wystarcza. Wiele próbek poprawia wnioskowanie nullowalności i typów elementów tablicy.

  2. 2

    Wybierz styl

    System.Text.Json (.NET 6+) lub Newtonsoft.Json (starszy). Nazwy właściwości PascalCase z `[JsonPropertyName]` dla JSON-a w camelCase.

  3. 3

    Wybierz docelową wersję C#

    C# 10+ dla rekordów i przestrzeni nazw o zasięgu pliku, C# 8 dla nullowalnych typów referencyjnych albo starszą dla maksymalnej kompatybilności.

  4. 4

    Skopiuj klasy

    Jedna klasa główna plus klasy zagnieżdżone dla każdego kształtu obiektu, wszystko w jednym pliku gotowym do wrzucenia do projektu.

Przykładowy wynik

Dla wejścia:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

Wynik System.Text.Json (C# 10+):

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

    [JsonPropertyName("emails")]
    public List<string> Emails { get; set; } = new();

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

Mapowanie typów

JSON Typ C#
string string
liczba całkowita int (lub long dla > int.MaxValue)
liczba (dziesiętna) double (lub decimal, jeśli wybrane)
boolean bool
null object? (lub scalony z rodzeństwem)
data ISO-8601 DateTime (lub DateOnly)
ciąg w kształcie GUID Guid
tablica stringów List<string>
obiekt Klasa zagnieżdżona

Opcje atrybutów

  • System.Text.Json ([JsonPropertyName("foo")]), preferowany dla .NET 6+ i nowych projektów.
  • Newtonsoft.Json ([JsonProperty("foo")]), dla starszych projektów albo gdy potrzebujesz funkcji specyficznych dla Newtonsoft.
  • Brak, nazwy właściwości dokładnie odpowiadają kluczom JSON (działa tylko, jeśli klucze JSON są już w PascalCase).

Częste błędy

  • Używanie int dla pola, które może się przepełnić. Jeśli Twój JSON ma wartości przekraczające int.MaxValue, użyj long. Generator awansuje automatycznie, gdy widzi duże wartości.
  • Brak [JsonIgnore] dla właściwości obliczanych. Jeśli dodasz pomocnicze właściwości do wygenerowanej klasy, oznacz je [JsonIgnore], bo inaczej będą serializowane na wyjściu.
  • Zapomnienie o parsowaniu niezależnym od kultury. Pola decimal powinny deserializować się z CultureInfo.InvariantCulture; System.Text.Json robi to domyślnie, Newtonsoft z ustawieniami globalnymi.
  • Zaufanie generatorowi na jednej próbce. Nullowalność i typy elementów tablicy są zgadywane z tego, co widzi. Zawsze sprawdź adnotacje nullowalności względem rzeczywistego zachowania Twojego API.

Najczęściej zadawane pytania

Dla nowych projektów na .NET 6+ użyj System.Text.Json, jest szybszy, wbudowany i obsługuje teraz niemal każdą funkcję, którą ma Newtonsoft. Newtonsoft użyj dla starszych projektów albo gdy potrzebujesz jego specyficznych funkcji (niestandardowe contract resolvery, JObject, obsługa dynamiczna).

Rekordy są idiomatyczne dla niezmiennych DTO w C# 10+. Dają równość wartościową i zwięzłą składnię. Klasy są lepsze, gdy potrzebujesz mutacji lub kompatybilności ze starszym kodem. Narzędzie pozwala wybrać dowolne.

Jeśli projekt używa nullowalnych typów referencyjnych (C# 8+), pola zaobserwowane jako null w którejkolwiek próbce stają się string?, int? itd. Bez NRT nullowalność jest sygnalizowana tylko dla typów wartościowych (np. int?).

Mieszanych tablic obiektów o różnych kształtach nie da się bezpośrednio przedstawić w silnie typowanym C#. Narzędzie wnioskuje wspólną klasę bazową lub (awaryjnie) object; dla mieszanych tablic zwykle warto przeprojektować JSON.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach