JSON'dan C#'a dönüşüm, JSON verisinden güçlü türlendirilmiş C# sınıf tanımları üretme sürecidir. Bir .NET uygulaması bir API'den, yapılandırma dosyasından veya mesaj kuyruğundan JSON aldığında, bu veriyi nesnelere seri dışı bırakmak için C# sınıflarına ihtiyaç duyar. Özellikle JSON iç içe nesneler, diziler ve karma türler içerdiğinde bu sınıfları elle yazmak hem zahmetli hem de hata yapmaya açıktır.
Bir JSON'dan C# sınıfı üretici, JSON'unuzdaki yapıyı ve değerleri inceleyerek her alan için uygun C# türünü çıkarsar ve özellik erişimcileri ile serileştirme öznitelikleri içeren sınıf tanımları üretir. Çıktı .NET adlandırma kurallarını izler: PascalCase özellik adları, orijinal camelCase veya snake_case JSON anahtarlarıyla eşleştirme için JsonPropertyName öznitelikleri ve diziler için List'<'T'>' kullanımı.
Bu dönüşüm özellikle ASP.NET Core web API'lerinde, Azure Functions'da ve harici JSON verisi tüketen her .NET servisinde yaygındır. dynamic veya Dictionary'<'string, object'>' kullanmak yerine, türlendirilmiş sınıflar derleme zamanı güvenliği, IntelliSense desteği ve yalnızca çalışma zamanında ortaya çıkacak alan adı yazım hatalarına karşı koruma sağlar. JSON'unuzu bu araca yapıştırın ve kullanıma hazır C# sınıflarını anında alın.
Neden JSON'dan C# Üretici Kullanmalısınız?
JSON örneklerinden C# model sınıflarını elle yazmak zaman alır ve insan hatasına zemin hazırlar. Bir üretici tekrarlayan kısımları üstlenir; siz iş mantığına odaklanırsınız.
⚡
Anında sınıf üretimi
JSON'unuzu yapıştırın, bir saniyenin altında eksiksiz C# sınıfları alın. Manuel özellik yazımı yok, unutulan alan yok.
🔒
Gizlilik öncelikli işlem
Tüm dönüşüm tarayıcınızda çalışır. JSON veriniz asla makinenizden çıkmaz; API anahtarları, token'lar ve kişisel veriler gizli kalır.
📋
Doğru öznitelik eşlemesi
Üretilen sınıflar, PascalCase C# özelliklerini orijinal JSON anahtar adlarıyla eşleştiren JsonPropertyName özniteliklerini içerir; seri dışı bırakma uyumsuzluklarını önler.
🌐
Hesap veya kurulum gerektirmez
Sayfayı açın ve JSON'unuzu yapıştırın. Kurulacak NuGet paketi, yapılandırılacak Visual Studio eklentisi veya doldurulacak kayıt formu yoktur.
JSON'dan C#'a Kullanım Senaryoları
Backend API Entegrasyonu
Üçüncü taraf REST API'leri için istek ve yanıt modelleri oluşturun. API belgelerindeki örnek JSON'ı yapıştırın ve HttpClient çağrıları için kullanıma hazır C# sınıfları alın.
ASP.NET Core Controller'ları
Action metodu parametreleri için model sınıfları oluşturun. Endpoint'iniz bir JSON gövdesi kabul ettiğinde, üretilen sınıf otomatik model bağlama ve doğrulama imkânı sağlar.
Azure Functions & Sunucusuz Mimari
Kuyruklar, event hub'lar veya HTTP tetikleyicilerinden JSON mesajları işleyen Azure Functions için giriş ve çıkış bağlamaları oluşturun.
Yapılandırma Seri Dışı Bırakma
appsettings.json bölümlerini veya harici yapılandırma dosyalarını, bağımlılık enjeksiyonunda IOptions'<'T'>' ile kullanmak üzere türlendirilmiş C# seçenek sınıflarına dönüştürün.
Veritabanı Tohumlama & Taşıma
JSON sabit dosyalarını Entity Framework tohum verisi, entegrasyon testi kurulumları veya veri taşıma betikleri için C# nesnelerine dönüştürün.
C# Tür Sistemlerini Öğrenmek
.NET'e yeni başlayan öğrenciler ve geliştiriciler, JSON türlerinin C# türlerine nasıl eşlendiğini görebilir, özellik erişimcilerini anlayabilir ve örneklerle serileştirme öznitelikleri hakkında bilgi edinebilir.
JSON'dan C#'a Tür Eşleme Başvurusu
Her JSON değer türü belirli bir C# türüne eşlenir. Üretici, en kesin türü seçmek için gerçek değerleri analiz eder. Örneğin ondalık noktası olmayan bir JSON sayısı int olurken 3,14 double olur. Null değerler object? (null olabilir başvuru türü) üretir; çünkü gerçek tür yalnızca null'dan çıkarsanamaz.
JSON Türü
Örnek
C# Türü
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 ve Newtonsoft.Json
.NET'in iki önemli JSON serileştirme kütüphanesi vardır. Bu araçtan üretilen sınıflar, .NET Core 3.0'dan bu yana yerleşik seçenek olan System.Text.Json özniteliklerini (JsonPropertyName) kullanır. Projeniz Newtonsoft.Json kullanıyorsa öznitelikleri değiştirebilirsiniz.
System.Text.Json
.NET Core 3.0'dan bu yana yerleşik olarak gelir. Newtonsoft'a kıyasla daha hızlı ve daha az bellek tüketir. Özellik eşlemesi için [JsonPropertyName] kullanır. Yeni .NET 6+ projeleri için varsayılan tercih. JsonPath veya başvuru yönetimi gibi tüm Newtonsoft özelliklerini kutudan çıktığı haliyle desteklemez.
Newtonsoft.Json
Özgün .NET JSON kütüphanesi (Json.NET). Özellik eşlemesi için [JsonProperty] kullanır. Daha gelişmiş senaryoları destekler: polimorfik serileştirme, JsonPath sorguları, daha fazla esneklikle özel dönüştürücüler. Eski kod tabanlarında ve System.Text.Json'ın eksik kaldığı özelliklere ihtiyaç duyan projelerde yaygın olarak kullanılmaya devam eder.
Kod Örnekleri
Bu örnekler, JSON'dan üretilen C# sınıflarının her iki önemli serileştirme kütüphanesiyle nasıl tanımlanıp kullanılacağını ve komut satırından üretimin nasıl otomatikleştirileceğini göstermektedir.
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; }
// }
JsonPropertyName ile JsonProperty arasındaki fark nedir?
JsonPropertyName, yerleşik .NET serileştiricisi olan System.Text.Json'a ait özniteliktir. JsonProperty ise üçüncü taraf bir kütüphane olan Newtonsoft.Json'a (Json.NET) aittir. Her ikisi de bir C# özellik adını JSON alan adıyla eşleştirir; ancak farklı ad alanlarına aittirler ve birbirlerinin yerine geçemezler. Yeni .NET 6+ projeleri için JsonPropertyName, projeniz halihazırda Newtonsoft'a bağımlıysa JsonProperty kullanın.
Üretici iç içe JSON nesnelerini nasıl işler?
Her iç içe nesne kendi C# sınıfına dönüşür. Üst sınıftaki özellik, iç içe sınıfı tür olarak kullanır. Örneğin JSON'unuzda "street" ve "city" içeren bir nesne barındıran "address" alanı varsa, üretici bir Address sınıfı oluşturur ve üst sınıfta bu özelliği Address olarak türlendirir.
Karma türler içeren JSON dizileriyle ne olur?
Üretici, dizi eleman türünü null olmayan ilk elemandan çıkarsar. Dizi karma türler içeriyorsa (string'ler ve sayılar birlikte), üretilen tür List'<'object'>' olarak geri düşer. Pratikte, iyi yapılandırılmış API yanıtları tek bir dizi içinde nadiren türleri karıştırır.
Üretilen sınıfları Entity Framework ile kullanabilir miyim?
Evet, ancak [Key], [Required] veya [Column] gibi EF'e özgü ek açıklamalar eklemeniz gerekecek. Üretilen sınıflar size özellik yapısını verir; bunları iskelet olarak kabul edin ve EF yapılandırmasını üzerine ekleyin. EF ayrıca parametresiz bir kurucu bekler; üretilen sınıflar bunu varsayılan olarak zaten içerir.
JSON'daki null değerler C#'a nasıl dönüştürülür?
Bir JSON null değeri object? türü üretir; çünkü üretici yalnızca null'dan amaçlanan türü belirleyemez. Üretimden sonra, API şemasına ilişkin bilginize dayanarak object? yerine doğru null olabilir türü (string?, int? veya belirli bir sınıf?) koymalısınız.
camelCase JSON, PascalCase C# özelliklerine otomatik olarak eşlenir mi?
Evet. Üretici, "firstName" gibi JSON anahtarlarını FirstName gibi PascalCase özelliklerine dönüştürür ve [JsonPropertyName("firstName")] özniteliği ekler. Bu, serileştiricinin serileştirme ve seri dışı bırakma sırasında iki adlandırma kuralı arasında otomatik olarak eşleme yapmasını sağlar.
C#'ta opsiyonel alanlara sahip JSON'ı nasıl işlerim?
Özellik türünü null olabilir yapın (örneğin string? veya int?) ve bir varsayılan değer atayın. System.Text.Json ile serileştirme sırasında null değerleri atlamak için JsonSerializerOptions.DefaultIgnoreCondition özelliğini de yapılandırabilirsiniz. Üretici varsayılan olarak null olamaz türler üretir; bu nedenle API sözleşmenize göre null olabilirliği gözden geçirip düzenleyin.