logo
GeekFormat

JSON'dan C#'ye

Ücretsiz çevrimiçi JSON'dan C#'ye aracı. API yanıtlarını veya yapılandırma JSON'larını tek tıklamayla standart C# sınıflarına dönüştürün, ASP.NET Core, Unity, Blazor, .NET MAUI projelerinde doğrudan kullanın. [JsonProperty] öznitelikleri, List generic, Nullable<T>, iç içe sınıfların otomatik ayrılması desteği, tamamen tarayıcıda yerel oluşturma.

İlgili Öneriler

JSON'dan C#'ye giriş: JSON verilerini derlenebilir C# POCO sınıflarına dönüştürme

JSON'dan C#'ye, JSON biçimindeki verileri (nesneler veya diziler) C# sınıf tanımlarına (POCO, Plain Old CLR Object) dönüştürme işlemidir. C# .NET ekosisteminin ana dilidir, ASP.NET Core arka uç, Unity oyunları, .NET MAUI çapraz platform uygulamaları, Blazor WebAssembly, masaüstü uygulamaları (WPF/WinForms), Azure bulut hizmetleri gibi senaryolarda yaygın olarak kullanılır. Geliştirme sürecinde genellikle API belgelerindeki veya gerçek yanıtlardaki JSON örneklerini C# türlerine dönüştürmek gerekir, sınıfları manuel olarak yazmak sadece çok fazla tekrarlayan iş gerektirmekle kalmaz, aynı zamanda alan türleri ve özniteliklerinde hata yapmaya da eğilimlidir, bu nedenle bu araç bu süreci otomatikleştirmeyi amaçlamaktadır.

Bu araç quicktype-core tabanlı olarak tarayıcıda yerel olarak çalışır, standart POCO sınıf kodu oluşturmak için C# işleyici kullanır, varsayılan çıktı using System.Collections.Generic; ve [JsonProperty("orijinal anahtar")] özniteliklerini (Newtonsoft.Json uyumluluk modu) içerir, Visual Studio'da doğrudan derlenmek üzere açılabilir. Bu sadece bir tür taslağı değil, .NET projesine yerleştirip NuGet paketi ile birlikte kullandıktan sonra hemen kullanılabilecek bir C# sınıfıdır.

Tür çıkarımı JSON'dan C#'ye'nin çekirdeğidir. Araç, JSON temel türlerini .NET standart türleriyle eşleştirir: dize→string, tamsayı→long, kayan noktalı sayı→double, mantıksal→bool, dizi→List<T>, iç içe geçmiş nesne→bağımsız sınıf, null değer→Nullable<T> (örneğin long? / bool? / string?). İç içe geçmiş nesneler için araç otomatik olarak her katman için yeni bir sınıf oluşturur ve alan adının ilk harfini büyük yaparak adlandırır, örneğin address alanı Address sınıfını oluşturur, items dizisindeki nesne Item sınıfını oluşturur.

Modern C# sözdizimi ile entegrasyon: bu araç varsayılan olarak serileştirilebilir POCO'lar (genel { get; set; } özellikleri) oluşturur. Değişmezliği vurgulayan projeler için geliştiriciler class'ı C# 9+ record türüne değiştirebilir ve { get; set; }'i init-only özelliklere dönüştürebilir (public string Name { get; init; }), JsonSerializer.Deserialize<T>(jsonString) ile birlikte kullanıldığında derleme zamanında verilerin değiştirilmeyeceğini garanti edebilir, bu ASP.NET Core 7+ Minimal API, Entity Framework Core 8+ değişmez varlık tasarım trendleriyle uyumludur.

JSON'u işlenmek üzere sunucuya yüklemeyi gerektiren bazı çevrimiçi araçların aksine, bu aracın tüm hesaplamaları tamamen tarayıcıda tamamlanır. quicktype-core Web Worker aracılığıyla yüklenir ve çalıştırılır, JSON ayrıştırma, tür çıkarımı, C# kod oluşturma ve dosya indirme tamamen yerel olarak gerçekleştirilir, herhangi bir sunucuya veri gönderilmez. Bu, API anahtarları, kullanıcı gizlilik alanları, yayınlanmamış iş yapıları içeren JSON için özellikle önemlidir, sayfayı kapattığınızda veriler bellekten silinir.

Otomatik olarak oluşturulan kodun bir bitiş noktası değil, bir başlangıç noktası olduğunu belirtmek gerekir. Araç, JSON örneğine dayanarak türleri çıkarır, iş mantığındaki daha kesin türleri belirleyemez (örneğin URL, E-posta, ID gibi anlamsal türlerin tümü string olarak çıkarılır). snake_case JSON alanları için C# alanları PascalCase adlandırmayı korur (user_name → UserName), ancak [JsonProperty] özniteliği orijinal anahtarı korur, ters serileştirme sırasında otomatik olarak eşlenir. Oluşturulan sonucu ilk taslak olarak kabul etmeniz ve proje özelliklerine göre alan adlarını, türleri, öznitelikleri ince ayar yapmanız önerilir.

Kullanım senaryoları

  • ASP.NET Core Web API: OpenAPI/Swagger belgelerindeki örnek JSON'u DTO sınıflarına dönüştürme, [FromBody] model bağlama ile birlikte frontend'den istek alma
  • ASP.NET Core MVC: form/JSON istek gövdesini güçlü tür Model'e dönüştürme, ModelState otomatik doğrulama ile birlikte kullanma
  • Newtonsoft.Json ters serileştirme: üçüncü taraf arabirim yanıt JSON'unu [JsonProperty] öznitelikli POCO sınıflarına dönüştürme, manuel alan eşleştirmesi gerekmez
  • System.Text.Json yüksek performans senaryoları: JSON'u record türüne veya init-only özelliklere dönüştürme, JsonSerializer.Deserialize<T> ile birlikte başlangıç hızını artırma
  • Unity oyun betikleri: ağ API'sinin döndürdüğü JSON'u (oyuncu verileri, seviye yapılandırması, mağaza öğeleri, sıralama) serileştirilebilir ScriptableObject veri modellerine dönüştürme
  • .NET MAUI çapraz platform uygulamaları: arka uç API JSON'unu Model sınıflarına dönüştürme, XAML veri bağlamada kullanma, iOS/Android/Windows'ta iş modelini paylaşma
  • Blazor Server / WebAssembly: API JSON'unu güçlü tür bileşen parametrelerine/sunucu modellerine dönüştürme, @inject HttpClient ile birlikte frontend/backend ortak tür tüketimi
  • Entity Framework Core: veritabanından dışa aktarılan JSON belgelerini varlık sınıflarına dönüştürme, EF Core model geçişleri için referans temel sınıflar olarak kullanma, [Key]/[Required] vb. veri ek açıklamalarıyla birlikte kullanma
  • Azure Functions / AWS Lambda: Event Grid/SNS/API Gateway/Cosmos DB tetikleyici olaylarının JSON'unu güçlü tür olay parametrelerine dönüştürme, sunucusuz işlev imzalarını basitleştirme
  • SignalR gerçek zamanlı iletişim: sunucu tarafından gönderilen JSON mesajlarını (sohbet, bildirimler, fiyatlar, IoT verileri) C# türlerine dönüştürme, Hub yöntemlerinde güçlü tür olarak tüketme
  • Mikro hizmet arabirim sözleşmeleri: hizmetler arası RPC (gRPC-Web/HTTP/WCF) JSON istek/yanıt örneklerini C# sınıflarına dönüştürme, birden çok ekip arasında paylaşılan sözleşme tanımları olarak kullanma
  • Yapılandırma dosyası yükleme: appsettings.json alt yapısını Options şablon sınıflarına dönüştürme (örneğin MyOptions : IOptions<MyOptions> IConfiguration.Bind ile birlikte)
  • Test verileri hazırlama: JSON test fikstürlerini C# sınıflarına dönüştürme, ardından Newtonsoft/System.Text.Json ile ters serileştirerek birim test sürücüsü olarak kullanma, xUnit/NUnit/MSTest ile birlikte kullanma
  • Web kazıyıcı veri ayrıştırma: HtmlAgilityPack/AngleSharp/PuppeteerSharp ile toplanan JSON verilerini C# sınıflarına dönüştürme, JObject dinamik erişiminde alan eksikliğini önleme
  • API belgesi yazma: Swagger/OpenAPI belgeleri, ReDoc, Knife4j, Swagger UI'da C# sınıfı örneklerini şema tanımlarına dahil ederek belgenin okunabilirliğini artırma
  • Kod incelemesi işbirliği: API yanıt JSON'unu doğrudan okunabilir POCO'lara dönüştürme, Code Review sırasında alan adlandırma, tür seçimi, öznitelik kullanımını tartışmayı kolaylaştırma
  • Eski proje yeniden yapılandırma: JObject/Dictionary<string, object> tabanlı dinamik erişimi POCO tabanlı güçlü tür erişimine yeniden yapılandırma, derleme zamanı tür denetimi ve bakım kolaylığını artırma
  • Eğitim ve öğretim: C# kurslarında, .NET giriş eğitimlerinde örnek JSON'u POCO'ya dönüştürerek nesne yönelimli modelleme, özellik erişimcileri, serileştirme ilkelerini gösterme

Nasıl Kullanılır

  1. JSON içeriğini soldaki düzenleyiciye yapıştırın, veya yükle düğmesine tıklayarak .json/.txt dosyası seçin, veya örnek düğmesine tıklayarak yerleşik verileri yükleyin
  2. 400 ms bekledikten sonra otomatik olarak dönüştürülür, sağda oluşturulan C# POCO sınıf kodu görüntülenir
  3. JSON biçim hataları varsa, «JSON'u düzelt» düğmesine tıklayarak yaygın sözdizimi sorunlarını otomatik olarak düzelttikten sonra yeniden dönüştürebilirsiniz
  4. «Kopyala» düğmesine tıklayarak tek sınıfı panoya kopyalayıp Visual Studio/Rider/VS Code'a yapıştırın, veya «İndir» düğmesine tıklayarak .cs dosyası olarak kaydedin

Özellikler

  • Saf tarayıcı yerel oluşturma: JSON ayrıştırma ve C# kod oluşturma tamamen JavaScript + quicktype-core aracılığıyla tarayıcı içinde tamamlanır, giriş verileri herhangi bir sunucuya yüklenmez
  • POCO + record iki form: varsayılan olarak serileştirilebilir POCO sınıfları oluşturur, tek tıklamayla C# 9+ record türüne geçer, modern .NET kodlama stiline uygundur
  • Newtonsoft [JsonProperty] öznitelikleri: her alan için otomatik olarak [JsonProperty("orijinal anahtar")] ekler, Newtonsoft.Json varsayılan davranışıyla uyumlu, PascalCase alan adları ters serileştirmeyi etkilemez
  • İç içe geçmiş nesneleri otomatik ayır: JSON iç içe nesneleri özyinelemeli olarak bağımsız C# sınıfları oluşturur, alan adı ilk harfi büyük kuralına göre adlandırır (örneğin address → Address), tür çakışmalarını önler
  • List generic otomatik genişletme: JSON dizileri otomatik olarak List<T>'ye dönüştürülür, T dizinin ilk öğesinden otomatik olarak çıkarılır (["a","b"] → List<string>, [{...}] → List<Item>)
  • Nullable<T> otomatik çıkarım: JSON'daki null değer alanları otomatik olarak Nullable<T> olarak işaretlenir (örneğin long? / string? / bool?), derleme zamanında null başvuru istisnalarını önler
  • PascalCase alan adlandırma: snake_case girdisi otomatik olarak PascalCase'e dönüştürülür (örneğin user_name → UserName), aynı zamanda [JsonProperty] özniteliği orijinal anahtarı koruyarak ters serileştirme uyumluluğunu sağlar
  • Zengin değer türü eşleştirmesi: string→string, integer→long, float→double, bool→bool, array→List<T>, null→Nullable<T>
  • Tam .cs şablonu: otomatik olarak using System.Collections.Generic; + namespace + public class + alanlar + özellikler içeren standart C# dosyası oluşturur, doğrudan derlenebilir
  • Kopyalama ve indirme: tek tıklamayla tek sınıfı panoya kopyalama veya .cs dosyası olarak indirme, doğrudan Visual Studio / Rider / VS Code'a sürükleyip bırakarak kullanma
  • JSON hatalarını tek tıklamayla düzeltme: sondaki virgüller, tek tırnaklar, eksik tırnaklar gibi yaygın biçimlendirme hatalarını otomatik olarak düzeltir, başarıyla düzelttikten sonra C# kodu oluşturmaya devam eder
  • Yerel geçmiş: localStorage tabanlı olarak son girişleri otomatik olarak kaydeder, sayfayı yeniledikten veya yanlışlıkla kapattıktan sonra hızla geri yükleyerek düzenlemeye devam edebilirsiniz

Kod Örnekleri

C#: Newtonsoft.Json ile bu araç tarafından oluşturulan POCO'yu ters serileştirme

csharp

ASP.NET Core projelerinde en yaygın kullanım: bu araç tarafından oluşturulan POCO'yu Newtonsoft.Json ile API yanıtını ters serileştirmek için kullanma.

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

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

    // Bu araç tarafından oluşturulan POCO:
    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) API'yi çağırarak JSON dizesi alın
        var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");

        // 2) Bu araç tarafından oluşturulan POCO'ya ters serileştirin
        //    İç olarak [JsonProperty("id")] vb. özniteliklere göre snake_case JSON otomatik eşleşir
        var user = JsonConvert.DeserializeObject<User>(json);

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

C#: ASP.NET Core Controller'da istekleri almak için bu araç tarafından oluşturulan POCO'yu kullanma

csharp

Bu araç tarafından oluşturulan User POCO'sunu ASP.NET Core Controller'a yerleştirin, [FromBody] ile birlikte frontend'den JSON isteklerini otomatik olarak alın.

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

// Bu araç tarafından oluşturulan POCO (varsayılan olarak Newtonsoft [JsonProperty] kullanır):
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");
        }

        // İş mantığı: siparişi kaydet
        // var order = OrderService.Create(request);

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

/*
 * Karşılık gelen .csproj bağımlılıkları:
 * <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
 * <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 */

C#: HttpClient.GetFromJsonAsync + System.Text.Json ile ters serileştirme

csharp

.NET 5+/.NET 7+ önerilen kullanım: System.Text.Json yerleşik genişletme yöntemini kullanma + record türü, [JsonPropertyName] özniteliği ile birlikte.

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

// Araç varsayılan olarak POCO class oluşturur; manuel olarak record türüne (değişmez veri aktarım nesnesi) aşağıdaki gibi değiştirilebilir:
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 HTTP + ters serileştirmeyi tek satırda tamamlar
        var user = await _http.GetFromJsonAsync<User>(
            $"https://api.example.com/users/{userId}");

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

/*
 * Karşılık gelen .csproj bağımlılıkları (System.Text.Json yerleşiktir, ek yükleme gerekmez):
 * <TargetFramework>net7.0</TargetFramework>
 *
 * Proje .NET 7+ ise ve [JsonProperty] Newtonsoft söz dizimiyle uyumluluk gerekiyorsa,
 * Program.cs'ye aşağıdakileri ekleyebilirsiniz:
 *   builder.Services.AddControllers()
 *       .AddNewtonsoftJson(options =>
 *       {
 *           options.SerializerSettings.ContractResolver =
 *               new Newtonsoft.Json.Serialization.DefaultContractResolver();
 *       });
 */

Best Practices

.csproj dosyasına <Nullable>enable</Nullable> ekleyin, bu araç tarafından oluşturulan string? / List<User>? gibi null yapılabilir türler otomatik olarak derleme zamanı null denetimi alır, NullReferenceException çalışma zamanı çökmelerini önler.

Bu araç JSON alanlarını otomatik olarak PascalCase'e dönüştürür (örneğin user_name → UserName), aynı zamanda [JsonProperty] özniteliği orijinal anahtarı korur, kodun .NET resmi adlandırma kurallarına uymasını sağlar, ters serileştirme hala orijinal JSON anahtarıyla çalışır.

İç içe geçme düzeyi 4 katmanı aştığında, kök nesneyi birden çok bağımsız POCO'ya bölmeniz önerilir, her biri farklı iş alanlarından sorumludur (örneğin UserDto / OrderDto / PaymentDto), tek bir büyük sınıfın tüm alanları içermesini önleyin, bakım kolaylığını artırın.

Bu araç tarafından oluşturulan POCO'ları hem EF Core Entity hem de API DTO olarak kullanmayın. Öneri: ①API katmanı DTO kullanır (JSON'dan oluşturulur); ②EF Core katmanı Entity kullanır ([Key]/[Required] vb. veri ek açıklamaları manuel olarak eklenir); ③DTO ↔ Entity eşleştirmesi yapmak için AutoMapper/Mapster kullanın, veritabanı yapısının doğrudan frontend'e maruz kalmasını önleyin.

Proje System.Text.Json kullanıyorsa, oluşturulan [JsonProperty("xxx")] ifadesini IDE'de genel değiştirme ile [JsonPropertyName("xxx")] olarak değiştirmeniz önerilir. Veya orijinal [JsonProperty]'ü koruyun + Microsoft.AspNetCore.Mvc.NewtonsoftJson paketini yükleyin ve Newtonsoft söz dizimiyle uyumlu olmak için AddNewtonsoftJson() çağrısı yapın.

Bu aracın tüm hesaplamaları tarayıcıda yerel olarak tamamlanır, ancak kurumsal ortamlarda ek bir savunma katmanı eklenmesi önerilir: ①Üretim veritabanı bağlantı dizeleri/API ana anahtarları içeren JSON'ları herhangi bir çevrimiçi araca kopyalamayın; ②İç POCO oluşturma için NSwag veya Visual Studio JSON'u sınıf olarak yapıştır'ı kullanarak tamamen çevrimdışı oluşturmanız önerilir; ③Çevrimiçi araçları yalnızca maskeleme yapıldıktan sonra örnek JSON'lar için kullanın.

1 MB'ı aşan JSON'lar tarayıcıda yavaş görüntülenir, önerilen: ①Birden çok bağımsız POCO sınıfına bölün (örneğin User.cs / Address.cs / Order.cs) iş modüllerine göre sınıflandırın; ②Çok büyük JSON Şeması (100+ alan) için NSwag veya Visual Studio'nun yerleşik özelliğini kullanarak doğrudan oluşturmanız önerilir; ③Bu aracı yalnızca küçük ve orta boyutlu API yanıtlarını (<100 alan) işlemek için kullanın.

Değiştirilmesi gerekmeyen DTO/yanıt modelleri için oluşturulan class'ı C# 9+ record olarak değiştirmeniz ve { get; set; }'i { get; init; } olarak değiştirmeniz önerilir, faydaları şunları içerir: ①Derleme zamanında verilerin değiştirilmeyeceğini garanti eder; ②Otomatik olarak değer eşitliği karşılaştırması (Equals/GetHashCode) elde eder; ③with ifadesiyle birlikte nesne kopyalamayı basitleştirir.

Sık Sorulan Sorular

JSON'u C# sınıflarına nasıl dönüştürebilirim?

JSON içeriğini sol giriş kutusuna yapıştırın, araç 400 ms içinde quicktype-core'u otomatik olarak çağırarak C# sınıflarını oluşturur, sağda tam kodu görüntüler. Ayrıca «Yükle» düğmesine tıklayarak .json/.txt dosyası seçebilir veya «Örnek» düğmesine tıklayarak yerleşik verileri yükleyebilirsiniz. Oluşturduktan sonra «Kopyala» düğmesine tıklayarak tek sınıfı panoya kopyalayabilir veya .cs dosyası olarak indirebilirsiniz.

Oluşturulan C# kodu [JsonProperty] öznitelikleri içerecek mi?

Evet. Araç varsayılan olarak Newtonsoft.Json uyumluluk modunu kullanır, her alan için otomatik olarak [JsonProperty("orijinal anahtar")] özniteliğini ekler, alan adı PascalCase'e dönüştürüldükten sonra bile ters serileştirmenin orijinal JSON anahtarına doğru şekilde eşlenmesini sağlar. System.Text.Json kullanıyorsanız, oluşturduktan sonra [JsonProperty]'i [JsonPropertyName] olarak değiştirebilirsiniz (her ikisi de aynı anlamdadır) veya doğrudan System.Text.Json varsayılan adlandırma ilkesini kullanabilirsiniz ([JsonPropertyName] System.Text.Json'da özel JsonNamingPolicy ile de işlenebilir).

POCO sınıfları mı yoksa record türleri mi oluşturmalıyım?

Varsayılan olarak serileştirilebilir POCO sınıfları ({ get; set; } özellikleri içeren) oluşturur. Proje C# 9+ record türleri kullanıyorsa (değişmez veri aktarım nesneleri, DTO/değişmez modeller için uygun), oluşturduktan sonra class'ı manuel olarak record olarak değiştirebilir ve { get; set; }'i init-only özelliklere dönüştürebilirsiniz (public string Name { get; init; }). record türü ASP.NET Core 7+ Minimal API, Entity Framework Core'da yaygın olarak kullanılır.

Hangi JSON veri yapıları destekleniyor?

Tüm geçerli JSON yapıları desteklenir: temel türler (null, boolean, number, string), diziler (tek boyutlu veya çok boyutlu), iç içe geçmiş nesneler (herhangi bir derinlikte). Kök giriş bir JSON nesnesi veya JSON dizisi olabilir, JSON nesnesi public class Root oluşturur, JSON dizisi public class Root : List<Item> oluşturur. JavaScript yerel değerleri (fonksiyonlar, Symbol, undefined, Date nesneleri vb.) desteklenmez.

JSON alan türleri C# türleriyle nasıl eşlenir?

Dize→string, tamsayı→long, kayan noktalı sayı→double, mantıksal→bool, dizi→List<T>, iç içe geçmiş nesne→bağımsız sınıf, null değer alanı→Nullable<T> (örneğin long? / bool? / string?). Ayrıntılı eşleştirme kuralları için sayfanın altındaki «JSON türlerinden C# türlerine eşleştirme hızlı başvuru tablosu»na bakın.

null alanları otomatik olarak Nullable<T> oluşturur mu?

Evet. Araç, JSON'da açıkça null olan veya eksik olan alanları tespit eder, otomatik olarak Nullable<T> biçimini oluşturur (örneğin long? Id { get; set; }), bu C# 8+'da tanıtılan Nullable Reference Types (NRT) özelliğiyle uyumludur, derleyicinin statik analiz sırasında null başvuru risklerini keşfetmesine yardımcı olur. Not: NRT etkinleştirildikten sonra referans türleri varsayılan olarak null olamaz, null yapılabilir olduğunu belirtmek için açıkça string? ile işaretlemeniz gerekir.

Diziler List<T>'ye dönüştürülür mü?

Evet. JSON dizileri C#'da tek tip olarak List<T>'ye dönüştürülür, öğe türü dizinin ilk öğesinden otomatik olarak çıkarılır: dize dizisi→List<string>, tamsayı dizisi→List<long>, nesne dizisi→List<Item>. Boş dizi [] öğe türünü çıkaramadığı için varsayılan olarak List<object> oluşturur, oluşturduktan sonra manuel olarak belirli bir türe (örneğin List<MyClass>) değiştirmeniz önerilir. T[] dizi söz dizimini tercih ediyorsanız, oluşturduktan sonra IDE'deki toplu değiştirme özelliğini kullanarak değiştirebilirsiniz.

İç içe geçmiş nesneler nasıl işlenir?

Araç, her iç içe geçmiş nesne için bağımsız bir C# sınıfı oluşturur, adlandırma kuralı alan adının ilk harfinin büyük harf yapılmasıdır (örneğin address → Address). Kök nesne bir items dizisi içeriyorsa ve öğeler nesnelerse, public class Item sınıfı oluşturulur, ardından public List<Item> Items { get; set; } ile başvurulur. Aynı yapıya sahip nesneler aynı türü yeniden kullanarak yinelenen tanımları önler.

Oluşturulan sınıf adlarını ve ad alanlarını özelleştirebilir miyim?

Evet. quicktype-core varsayılan olarak JSON kaynak adını (örneğin Root) kök sınıf adı olarak kullanır, oluşturduktan sonra sınıf adlarını, namespace'i ve tüm başvuru konumlarını manuel olarak değiştirebilirsiniz. İndirdiğiniz .cs dosyasının adı da kaydederken ihtiyaca göre yeniden adlandırılabilir (örneğin User.cs, Order.cs olarak değiştirin).

Oluşturulan kodu doğrudan .NET projesine koyup kullanabilir miyim?

Doğrudan kullanılabilir. Oluşturulan dosya standart C# sözdizimidir, using System.Collections.Generic; başvurusunu içerir, .cs dosyasını .NET projesinin kök dizinine veya alt dizinine yerleştirmeniz yeterlidir, .csproj'a ek bağımlılık eklemeniz gerekmez (System.Text.Json .NET'te yerleşiktir; Newtonsoft.Json için NuGet aracılığıyla Microsoft.AspNetCore.Mvc.NewtonsoftJson veya Newtonsoft.Json paketini yüklemeniz gerekir). Ardından JsonConvert.DeserializeObject<T>(jsonString) veya JsonSerializer.Deserialize<T>(jsonString) kullanarak ters serileştirebilirsiniz.

Veriler sunucuya yüklenir mi?

Tamamen tarayıcıda yerel olarak çalışır. JSON ayrıştırma, C# kod oluşturma ve dosya indirme tamamen JavaScript + WebAssembly aracılığıyla tarayıcıda tamamlanır, girilen JSON verileri ve oluşturulan C# kodu herhangi bir sunucuya yüklenmez, buluta kaydedilmez veya önbelleğe alınmaz. API anahtarları, belirteçler, yayınlanmamış iş alanları içeren hassas JSON'lar da güvenle kullanılabilir, sayfayı kapattığınızda silinir.

Kayıt veya giriş yapmam gerekiyor mu?

Gerekmez. Araç tamamen ücretsizdir, kayıt, giriş, yetkilendirme gerektirmez, sayfayı açar açmaz kullanabilirsiniz, tüm işlevler tarayıcıda yerel olarak sağlanır.

JSON biçim hatası olursa ne yapmalıyım?

Araç JSON geçerliliğini otomatik olarak algılar, hata olduğunda sağda kırmızı hata mesajı görüntüler ve «JSON'u düzelt» düğmesi sağlar, tıklayarak yaygın hataları otomatik olarak düzeltebilirsiniz: sondaki virgüller, tek tırnakları çift tırnağa dönüştürme, tırnaksız anahtarlara tırnak ekleme, yorumları kaldırma vb. Başarıyla düzelttikten sonra C# kodu oluşturmaya devam eder.

Hangisi daha iyi — Newtonsoft.Json mu System.Text.Json mı?

Her ikisi de .NET ekosistemindeki en temel JSON kitaplıklarıdır. Newtonsoft.Json (Json.NET olarak da bilinir) en uzun geçmişe ve en zengin ekosisteme sahiptir, neredeyse tüm .NET projeleriyle uyumludur; System.Text.Json .NET Core 3.0+'da yerleşik olarak bulunan yüksek performanslı bir kitaplıktır, hızlı başlar, düşük bellek kullanır, AOT dostudur. ASP.NET Core 3.0+ varsayılan olarak System.Text.Json kullanır; eski .NET Framework projeleri ve birçok üçüncü taraf kitaplık varsayılan olarak Newtonsoft.Json'a bağımlıdır. Bu araç varsayılan olarak her ikisiyle de uyumlu olmak için [JsonProperty] oluşturur (System.Text.Json .NET 7+'da Newtonsoft uyumluluk paketi Microsoft.AspNetCore.Mvc.NewtonsoftJson'u da destekler).

JSON'dan Java'ya, JSON'dan Rust'a arasındaki fark nedir?

Üçü de JSON'u hedef dilin tür tanımlarına dönüştürür, ancak çıktı biçimi farklıdır: JSON'dan C#'ye [JsonProperty] öznitelikli POCO sınıfları oluşturur, doğrudan Newtonsoft.Json veya System.Text.Json ile ters serileştirme için kullanılabilir; JSON'dan Java'ya Lombok/Gson/Jackson öznitelikli POJO'lar oluşturur; JSON'dan Rust'a Serde derive'lı struct'lar oluşturur. Üçü farklı ekosistemlere odaklanır, seçim teknoloji yığınına bağlıdır.

DateTime alanı içeren bir sınıfın ters serileştirilmesi başarısız olursa ne yapmalıyım?

System.Text.Json varsayılan olarak string ile DateTime arasında otomatik dönüşümü desteklemez, JsonException fırlatır. İki çözüm: ①alana [JsonConverter(typeof(DateTimeConverter))] özel dönüştürücü ekleme; ②Program.cs'de genel JsonSerializerOptions ayarlama: options.PropertyNameCaseInsensitive = true; ve DateTime'ı işlemek için özel JsonConverter kullanma. Newtonsoft.Json varsayılan olarak DateTime ters serileştirmeyi destekler, ancak özel biçimler (örneğin Unix zaman damgaları) için özel converter gerekir.

Neden oluşturulan sınıflarda namespace yok?

Araç varsayılan olarak namespace oluşturmaz, bunun nedeni kod parçacıklarının maksimum uyumluluğunu korumak, kullanıcıların herhangi bir projeye kopyalayıp kullanmasını kolaylaştırmaktır. Namespace gerekiyorsa, oluşturulan kodun en üstüne manuel olarak namespace YourApp.Models; ekleyebilir ve sınıfları ilgili .cs dosyasına yerleştirebilirsiniz. .NET projelerinde namespace'leri işlev modüllerine göre düzenlemeniz önerilir (örneğin Models / Dtos / ViewModels / Entities).

Visual Studio'da tek tıklamayla sınıf olarak yapıştırabilir miyim?

Visual Studio 2019+'da yerleşik olarak bulunan «Özel yapıştır → JSON'u sınıf olarak yapıştır» özelliği vardır (Düzenle menüsü → Özel yapıştır), doğrudan JSON'u C# sınıflarına dönüştürebilir. Bu araç tarafından oluşturulan kod bu özellikle uyumludur: bu araç tarafından oluşturulan C# kodunu panoya kopyaladıktan sonra herhangi bir .cs dosyasına yapıştırarak kullanabilirsiniz. VS'nin yerleşik özelliğini tercih ediyorsanız, bu aracı açmadan doğrudan Düzenle → Özel yapıştır → JSON'u sınıf olarak yapıştır'ı kullanabilirsiniz.

Sorun Giderme

«Lütfen JSON verilerini girin» görüntüleniyor veya sağ taraf boş

Sol giriş kutusu boş veya yalnızca boşluk karakterleri içeriyor, lütfen geçerli JSON içeriğinin yapıştırıldığından emin olun, veya yükle düğmesine tıklayarak .json/.txt dosyası seçin, ayrıca örnek düğmesine tıklayarak yerleşik örneği yükleyebilirsiniz.

JSON ayrıştırma başarısız görüntüleniyor

Yaygın nedenler: sondaki virgüller (örneğin {"a":1,}), çift tırnak yerine tek tırnak kullanma, anahtarların çift tırnak içine alınmaması, JavaScript yorumları içermesi. «JSON'u düzelt» düğmesine tıklayarak bazı hataları otomatik olarak düzeltebilirsiniz; hala başarısız olursa lütfen önce JSON biçimlendirici aracıyla doğrulayın.

Oluşturulan alan türleri yeterince doğru değil

Araç JSON örneğine dayanarak türleri çıkarır, örneğin tüm tamsayılar long, tüm dizeler string'dir. Daha doğru türlere (int/decimal/Guid/DateTime) ihtiyacınız varsa, lütfen oluşturduktan sonra alan türlerini manuel olarak değiştirin. System.Text.Json varsayılan olarak DateTime'ı desteklemez, [JsonConverter] ile özelleştirmeniz gerekir.

null alanları Nullable<T> oluşturuyor ancak projede Nullable Reference Types etkinleştirilmemiş

Araç varsayılan olarak C# 8+ Nullable Reference Types biçiminde oluşturur (örneğin string? / List<User>?). Proje daha eski bir .NET Framework sürümüyse/NRT etkinleştirilmemişse, referans türleri varsayılan olarak null yapılabilir, string?'deki ? işaretini doğrudan silebilirsiniz (veya .csproj'da <Nullable>enable</Nullable> öğesini etkinleştirebilirsiniz).

Derleme sırasında Newtonsoft.Json bağımlılığının bulunamadığı belirtiliyor

Lütfen .csproj dosyasına aşağıdaki PackageReference'ı ekleyin: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> Ardından dotnet restore çalıştırın, NuGet otomatik olarak indirecektir. System.Text.Json kullanıyorsanız yükleme gerekmez (.NET'te yerleşiktir).

snake_case JSON alanları PascalCase alan adlarıyla eşleşmiyor

Araç JSON alan adlarını otomatik olarak PascalCase'e dönüştürür (örneğin user_name → UserName), aynı zamanda [JsonProperty] özniteliği orijinal anahtarı korur, Newtonsoft.Json ters serileştirme sırasında [JsonProperty]'e göre eşleşecektir, manuel işlem gerekmez. System.Text.Json varsayılan adlandırma ilkesini kullanıyorsanız, [JsonProperty]'i [JsonPropertyName] olarak değiştirmeniz veya Program.cs'de CamelCase adlandırma ilkesini ayarlamanız gerekir.

İndirilen .cs dosyası projede derleme hatası veriyor

Olası nedenler: ①.csproj dosyasına Newtonsoft.Json/System.Text.Json bağımlılıkları eklenmemiş; ②Sınıf uygun olmayan bir dizine yerleştirilmiş (.NET projesinin kök dizinine veya alt dizinine yerleştirilmeli ve namespace ile eşleşmelidir); ③Sınıf adı projedeki diğer türlerle çakışıyor. Çözüm: bağımlılıkları ekleyin, dizini ve namespace'i ayarlayın, çakışan sınıfı yeniden adlandırın.

ASP.NET Core'da JSON alırken «Cannot deserialize» hatası oluşuyor

ASP.NET Core 3.0+ varsayılan olarak System.Text.Json kullanır, ancak araç tarafından oluşturulan [JsonProperty] Newtonsoft.Json söz dizimidir. İki çözüm: ①.csproj dosyasına Microsoft.AspNetCore.Mvc.NewtonsoftJson paketini ekleyin ve Program.cs'de AddNewtonsoftJson() çağrısı yapın; ②Oluşturulan tüm [JsonProperty("xxx")] ifadelerini [JsonPropertyName("xxx")] (System.Text.Json söz dizimi) olarak değiştirin.

Dizi sayısal tür ancak List<object> oluşturuyor

Genellikle dizi boş [] olduğunda varsayılan olarak List<object> olarak çıkarılır, lütfen orijinal JSON'a en az bir örnek öğe ekleyin (örneğin [1,2,3]), araç ilk öğeye göre türü çıkaracaktır; veya oluşturduktan sonra manuel olarak List<object>'i List<long>/List<int> olarak değiştirin.

Çok büyük JSON'ları dönüştürürken sayfa donuyor

JSON'u birden çok bağımsız modüle bölerek ayrı ayrı dönüştürmeniz veya yalnızca modellenmesi gereken kısmı çıkarmanız önerilir. Tarayıcı çok sayıda iç içe geçmiş sınıfı görüntülerken çok fazla bellek tüketecektir, 5 MB'ı aşan JSON'lar için NSwag veya Visual Studio'nun yerleşik «JSON'u sınıf olarak yapıştır» özelliğini kullanmanız önerilir.

Sözlük

POCO (Plain Old CLR Object)
C#/.NET'te «sade CLR nesnesi» kısaltması, kısıtlamaları şunlardır: genel varsayılan yapıcı + private alanlar + genel { get; set; } özellikleri + çerçeve bağımlılığı yok. Bu aracın oluşturduğu standart bir POCO'dur.
record
C# 9+'da tanıtılan değişmez veri aktarım nesnesi türü, başvuru eşitliği yerine değer eşitliği kullanır. Bu araçta oluşturduktan sonra manuel olarak record olarak değiştirilebilir, DTO'lar, API yanıt modelleri, değişmez yapılandırma gibi senaryolar için uygundur.
[JsonProperty]
Newtonsoft.Json'un alan eşleştirme özniteliği. Bu araç varsayılan olarak her alan için [JsonProperty("orijinal anahtar")] ekler, PascalCase alan adlarının snake_case JSON'u doğru şekilde ters serileştirebilmesini sağlar.
Newtonsoft.Json
Json.NET olarak da bilinir, .NET ekosistemindeki en popüler JSON kitaplığıdır. En zengin ekosisteme ve en iyi uyumluluğa sahiptir, neredeyse tüm .NET projeleri tarafından desteklenir. ASP.NET Core 3.0'dan önce varsayılan olarak kullanılıyordu, 3.0'dan sonra System.Text.Json ile değiştirildi, ancak yine de NuGet paketi aracılığıyla uyumlu hale getirilebilir.
System.Text.Json
.NET Core 3.0+'da yerleşik olarak bulunan yüksek performanslı JSON kitaplığı. Hızlı başlar, düşük bellek kullanır, AOT dostudur, [JsonPropertyName] (Newtonsoft'un [JsonProperty]'ine karşılık gelir) ve özel JsonNamingPolicy adlandırma ilkesini içerir.
Nullable<T>
C#'da değer türünün null olabileceğini belirten tür (örneğin long? / bool?). Bu araç, JSON'daki null alanları otomatik olarak Nullable<T> olarak çıkarır, derleme zamanında null başvuru istisnalarını önler.
List<T>
.NET koleksiyon çerçevesindeki genel liste türü. Bu araç JSON dizilerini otomatik olarak List<T>'ye dönüştürür, T dizinin ilk öğesinden otomatik olarak çıkarılır (örneğin ["a"] → List<string>).
namespace
C#'da sınıfları düzenlemek için kullanılan ad alanı anahtar sözcüğü, Java'daki package'a benzer. Bu araç tarafından oluşturulan kod varsayılan olarak namespace içermez, manuel olarak eklenebilir (örneğin namespace MyApp.Models).
ASP.NET Core
Microsoft'un açık kaynaklı çapraz platform web çerçevesi. Bu araç tarafından oluşturulan POCO sınıfları doğrudan ASP.NET Core Controller [FromBody] model bağlama, Minimal API, Blazor bileşen parametreleri gibi senaryolarda kullanılabilir.
Unity
Dünyanın en popüler oyun motoru, betik dili C#'dir. Bu araç tarafından oluşturulan POCO sınıfları Unity ağ API yanıt ayrıştırma, ScriptableObject yapılandırma veri modellemesi için kullanılabilir.
Snake_case → PascalCase
Alan adlandırma kuralı dönüşümü. snake_case adlandırmasını (örneğin user_name, created_at) PascalCase adlandırmasına (örneğin UserName, CreatedAt) dönüştürme, .NET resmi adlandırma kurallarına uyma.
quicktype-core
Bu aracın temel olarak bağımlı olduğu açık kaynaklı çok dilli JSON tür üretim kitaplığıdır (quicktype projesi), C#, Java, TypeScript, Rust, Go, Swift vb. ondan fazla dili destekler, TypeScript + WebAssembly tabanlı olarak tarayıcıda çalışır.
.NET MAUI
Microsoft'un çapraz platform UI çerçevesi (.NET Multi-platform App UI), C# kodu iOS/Android/Windows/macOS'ta paylaşılabilir. Bu araç tarafından oluşturulan POCO'lar MAUI'da XAML veri bağlama için Model olarak uygundur.
Blazor
Microsoft'un WebAssembly tabanlı SPA çerçevesi, Server ve WebAssembly olmak üzere iki modu vardır. Bu araç tarafından oluşturulan C# sınıfları Blazor bileşen parametreleri, güçlü tür API yanıt modelleri için kullanılabilir, tek dille tam yığın geliştirme verimliliğini artırır.
HttpClient.GetFromJsonAsync
.NET 5+/System.Net.Http.Json genişletme yöntemi, HTTP GET + JSON ters serileştirmeyi tek satırda tamamlar. Bu araç tarafından oluşturulan POCO'larla birlikte kullanıldığında HTTP API istemci kodunu önemli ölçüde basitleştirebilir.
JsonNamingPolicy
System.Text.Json'da JSON alan adları ile C# özellik adları arasındaki eşleştirme kurallarını kontrol eden sınıf (örneğin CamelCase, SnakeCaseLower). Newtonsoft.Json, [JsonProperty] özniteliği veya ContractResolver aracılığıyla uygulanır.
IOptions<T>
.NET Options deseninin temel arabirimi, appsettings.json alt yapısını güçlü tür sınıflarına bağlar. Bu araç tarafından oluşturulan POCO'lar IConfiguration.Bind ile birlikte doğrudan IOptions<T> uygulaması olarak kullanılabilir.

JSON türlerinden C# türlerine eşleştirme hızlı başvuru tablosu

Araç, JSON değer türlerine göre karşılık gelen .NET/C# türlerini otomatik olarak çıkarır:

JSON değer örneğiOluşturulan C# türüNullable biçimiAçıklama
nullBağlama göre çıkarılırT?null değer alanları otomatik olarak Nullable<T> olarak çıkarılır (örneğin long? / bool? / string?)
true / falseboolbool?JSON mantıksal değerleri doğrudan C# bool ile eşleşir
42longlong?JSON tamsayıları varsayılan olarak long ile eşleşir (64-bit tamsayı, büyük sayılarla uyumlu)
3.14doubledouble?JSON kayan noktalı sayıları varsayılan olarak double ile eşleşir (çift hassasiyetli kayan noktalı sayı)
"hello"stringstring?JSON dizeleri C# string ile eşleşir
["a","b"]List<string>List<string>?Dize dizileri List<string> ile eşleşir
[1,2,3]List<long>List<long>?Tamsayı dizileri List<long> ile eşleşir
[{...},{...}]List<Item>List<Item>?Nesne dizileri önce ilk öğe için karşılık gelen sınıfı oluşturur sonra List ile sarar
[]List<object>List<object>?Boş diziler öğe türünü çıkaramaz, varsayılan olarak object'e düşer, oluşturduktan sonra manuel olarak belirli bir türe değiştirmeniz önerilir
{...} iç içe geçmiş nesnebağımsız sınıfClassName?İç içe geçmiş nesneler bağımsız sınıf oluşturur, alan adı ilk harfi büyük kuralına göre adlandırılır (address → Address)

Newtonsoft.Json ve System.Text.Json öznitelik karşılaştırma tablosu

.NET ekosistemindeki iki temel JSON kitaplığının alan eşleştirme özniteliklerinin karşılaştırması. Bu araç varsayılan olarak Newtonsoft uyumlu [JsonProperty] oluşturur:

Karşılaştırma öğesiNewtonsoft.JsonSystem.Text.Json
Alan eşleştirme özniteliği[JsonProperty("user_name")][JsonPropertyName("user_name")]
Varsayılan adlandırma ilkesiPascalCase alan adlarını korur (snake_case için [JsonProperty] gerekir)Orijinal alan adlarını korur (JSON anahtarıyla eşleşir, varsayılan CamelCase)
Özel adlandırma[JsonProperty] ile alan başına belirtme[JsonPropertyName] + JsonNamingPolicy genel ayarı
null değer işlemeNullValueHandling.Ignore / IncludeJsonIgnoreCondition.WhenWritingNull
Yerleşik .NET sürümü.NET Framework / .NET Core / .NET 5+.NET Core 3.0+ / .NET 5+
Yükleme yöntemiNuGet: Newtonsoft.JsonYerleşik (yükleme gerekmez)
PerformansOrtaYüksek (hızlı başlar, düşük bellek kullanır)
AOT desteğisource generator gerekirYerel destek
Uygulama senaryolarıEski .NET projeleri, üçüncü taraf kitaplık bağımlılıkları, zengin ekosistemASP.NET Core 3.0+, yüksek performans senaryoları, .NET MAUI / Blazor

Privacy & Security

Bu JSON'dan C#'ye aracının tüm işlemleri tamamen tarayıcınızda yerel olarak tamamlanır: JSON ayrıştırma, C# kod oluşturma ve dosya indirme tamamen tarayıcının JavaScript + WebAssembly (quicktype-core) aracılığıyla istemci tarafında yürütülür, JSON içeriği, yüklenen dosyalar veya oluşturulan kod ağ üzerinden herhangi bir sunucuya gönderilmez. Dosya yükleme, tarayıcının yerel FileReader API'sini kullanarak doğrudan belleğe okur, herhangi bir aracı hizmetten geçmez. Çerez izleme kullanılmaz, kullanıcı giriş verileri veya kullanım davranış verileri toplanmaz. Sayfayı kapattıktan veya yeniledikten sonra tüm giriş ve çıkış içerikleri otomatik olarak bellekten silinir. API anahtarları, belirteçler, hassas iş verileri içeren JSON'ları işlemek için uygundur.

Authoritative References