JSON'ten C# Sınıfına

Bir JSON örneğini yapıştırın ve .cs dosyasına yerleştirilebilecek C# POCO sınıflarını elde edin. Uygun veri türlerini seçer, ek sınıf tanımları içeren iç içe yerleştirilmiş nesneleri işler, boş değerli referans türlerini destekler ve projeye göre System.Text.Json veya Newtonsoft.Json atributlarını üretir.

JSON'ı C#'a nasıl dönüştürürsünüz?

  1. 1

    JSON'u yapıştırın

    Bir örnek yeterlidir. Birden fazla örnek, null değerlerin ve dizi öğelerinin tahminini iyileştirir.

  2. 2

    Stili seçin

    System.Text.Json (.NET 6+) veya Newtonsoft.Json (eski). camelCase JSON için `[JsonPropertyName]` özniteliğiyle belirtilen PascalCase özellik adları.

  3. 3

    Hedef C# sürümünü seçin

    Kayıtlar ve dosya düzeyindeki ad alanları için C# 10+, boş değer alabilen referans türleri için C# 8 veya en yüksek uyumluluk için daha eski sürümler kullanılır.

  4. 4

    Sınıfları kopyalayın

    Bir temel sınıf ve her nesne şekli için iç içe yerleştirilmiş sınıflar; hepsi tek bir dosyada bulunur ve projenize kolayca eklenmek üzere hazırlanmıştır.

Örnek Çıkış

Giriş için:

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

System.Text.Json çıktısı (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!;
}

Tür Haritalaması

JSON C# tipi
karakter dizisi string
tam sayı int (veya int.MaxValue üstündeki değerler için long)
sayı (ondalık) double (veya seçilirse decimal)
mantıksal değer bool
null object? (veya komşu alanla birleştirilir)
ISO-8601 tarihi DateTime (veya DateOnly)
GUID biçiminde karakter dizisi Guid
karakter dizisi dizisi List<string>
nesne İç içe sınıf

Öznitelik seçenekleri

  • System.Text.Json ([JsonPropertyName("foo")]). NET 6+ ve yeni projeler için tercih edilir.
  • Newtonsoft.Json ([JsonProperty("foo")]), eski projeler için veya Newtonsoft’a özgü özelliklere ihtiyaç duyulduğunda kullanılır.
  • Yok, özellik adları JSON anahtarlarıyla tam olarak eşleşir (yalnızca JSON anahtarları zaten PascalCase ise geçerlidir).

Yaygın Hatalar

  • Taşabilecek bir alan için int kullanmak. JSON’unuzdaki değerler int.MaxValue’yi aşıyorsa long kullanın. Jeneratör büyük değerleri gördüğünde türü otomatik olarak yükseltir.
  • Hesaplanan özellikler için [JsonIgnore] eksik. Üretilen sınıfa yardımcı özellikler eklerseniz, bunları [JsonIgnore] ile belirleyin; aksi takdirde serielleştirme işlemi sırasında bu özellikler silinecektir.
  • Kültüre bağımsız analizi unutmak: decimal alanları CultureInfo.InvariantCulture ile deserialize edilmelidir; System.Text.Json bunu varsayılan olarak yapar, Newtonsoft ise küresel ayarlar kullanılarak bu işlemi gerçekleştirir.
  • Tek bir örnekle jeneratöre güvenmek. Boş değer alabilirlik ve dizi öğesi türleri, jeneratörün gördüğü verilerden tahmin edilir. Boş değer alabilirlik ek açıklamalarının makul olup olmadığını her zaman gerçek API davranışınızla karşılaştırarak kontrol edin.

Sık Sorulan Sorular

.NET 6+ üzerindeki yeni projeler için System.Text.Json’yi kullanın; daha hızlıdır, dahili bir komponenttir ve artık Newtonsoft’un neredeyse tüm özelliklerini destekler. Eski projelerde veya özel özelliklere ihtiyaç duyulduğunda (özel sözleşme çözücüler, JObject, dinamik işleme) ise Newtonsoft’u tercih edin.

Kayıtlar, C# 10+‘da değişmez DTO’lar için idealdir; değer eşitliği ve özlü bir sentaks sunar. Sınıflar ise değişiklik yapma veya eski sistemlerle uyumluluk gereken durumlarda daha uygundur. Bu araç, her iki seçeneği de kullanmanıza olanak tanır.

Eğer projeniz Nullable Reference Types (NRT) kullanıyorsa (C# 8+), herhangi bir örnekte null olarak gözlemlenen alanlar string?, int? vb. olur. NRT kullanılmadığında ise nullabilite yalnızca değer tipleri için belirtilir (örneğin int?).

Farklı nesne şekillerinden oluşan karmaşık diziler, güçlü tipli C#’de doğrudan temsil edilemez. Bu araç, ortak bir temel sınıf veya (yedek) object türü belirler; karmaşık diziler için genellikle JSON yapısını yeniden tasarlamak gerekir.

İlgili Araçlar

Araç diğer dillerde mevcuttur