Konversi JSON ke C# adalah proses menghasilkan definisi kelas C# yang bertipe kuat dari data JSON. Ketika aplikasi .NET menerima JSON dari API, file konfigurasi, atau message queue, aplikasi tersebut memerlukan kelas C# untuk melakukan deserialisasi data tersebut menjadi objek. Menulis kelas-kelas ini secara manual memakan waktu dan rentan terhadap kesalahan, terutama ketika JSON mengandung objek bersarang, array, dan tipe yang beragam.
Generator kelas JSON ke C# memeriksa struktur dan nilai dalam JSON Anda, menyimpulkan tipe C# yang tepat untuk setiap field, dan menghasilkan definisi kelas dengan property accessor dan atribut serialisasi. Output mengikuti konvensi penamaan .NET: nama properti PascalCase, atribut JsonPropertyName untuk pemetaan ke kunci JSON camelCase atau snake_case asli, serta penggunaan List'<'T'>' yang benar untuk array.
Konversi ini sangat umum digunakan di ASP.NET Core web API, Azure Functions, dan layanan .NET mana pun yang mengonsumsi data JSON eksternal. Daripada menggunakan dynamic atau Dictionary'<'string, object'>', kelas yang bertipe memberikan keamanan waktu kompilasi, dukungan IntelliSense, dan perlindungan terhadap kesalahan ketik nama field yang baru akan terdeteksi saat runtime. Tempel JSON Anda ke alat ini dan dapatkan kelas C# yang siap pakai seketika.
Mengapa Menggunakan Generator JSON ke C#?
Menulis kelas model C# secara manual dari sampel JSON memakan waktu dan membuka peluang kesalahan manusia. Generator menangani bagian yang berulang sehingga Anda bisa fokus pada logika bisnis.
⚡
Pembuatan kelas instan
Tempel JSON Anda dan dapatkan kelas C# lengkap dalam hitungan detik. Tidak perlu mengetik properti secara manual, tidak ada field yang terlupakan.
🔒
Pemrosesan yang mengutamakan privasi
Semua konversi berjalan di browser Anda. Data JSON tidak pernah meninggalkan perangkat Anda, sehingga API key, token, dan data pribadi tetap aman.
📋
Pemetaan atribut yang tepat
Kelas yang dihasilkan menyertakan atribut JsonPropertyName yang memetakan properti C# PascalCase ke nama kunci JSON asli, mencegah ketidaksesuaian saat deserialisasi.
🌐
Tidak perlu akun atau instalasi
Buka halaman dan tempel JSON Anda. Tidak ada paket NuGet untuk diinstal, tidak ada ekstensi Visual Studio untuk dikonfigurasi, tidak ada formulir pendaftaran.
Kasus Penggunaan JSON ke C#
Integrasi Backend API
Buat model request dan response untuk REST API pihak ketiga. Tempel contoh JSON dari dokumentasi API dan dapatkan kelas C# siap pakai untuk pemanggilan HttpClient.
ASP.NET Core Controllers
Buat kelas model untuk parameter metode action. Ketika endpoint Anda menerima body JSON, kelas yang dihasilkan memberikan model binding dan validasi otomatis.
Azure Functions & Serverless
Bangun binding input dan output untuk Azure Functions yang memproses pesan JSON dari queue, event hub, atau HTTP trigger.
Deserialisasi Konfigurasi
Konversi bagian appsettings.json atau file konfigurasi eksternal menjadi kelas opsi C# yang bertipe untuk digunakan dengan IOptions'<'T'>' dalam dependency injection.
Seeding & Migrasi Database
Ubah file fixture JSON menjadi objek C# untuk data seed Entity Framework, pengaturan integration test, atau skrip migrasi data.
Mempelajari Sistem Tipe C#
Mahasiswa dan developer yang baru mengenal .NET dapat melihat bagaimana tipe JSON dipetakan ke tipe C#, memahami property accessor, dan belajar tentang atribut serialisasi melalui contoh.
Referensi Pemetaan Tipe JSON ke C#
Setiap tipe nilai JSON dipetakan ke tipe C# tertentu. Generator menganalisis nilai aktual untuk memilih tipe yang paling tepat. Misalnya, angka JSON tanpa titik desimal menjadi int, sedangkan 3.14 menjadi double. Nilai null menghasilkan object? (tipe referensi nullable) karena tipe sebenarnya tidak dapat disimpulkan dari null saja.
Tipe JSON
Contoh
Tipe C#
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 vs Newtonsoft.Json
.NET memiliki dua library serialisasi JSON utama. Kelas yang dihasilkan oleh alat ini menggunakan atribut System.Text.Json (JsonPropertyName), yang merupakan opsi bawaan sejak .NET Core 3.0. Jika proyek Anda menggunakan Newtonsoft.Json, Anda dapat mengganti atributnya.
System.Text.Json
Tertanam dalam .NET sejak Core 3.0. Lebih cepat dan alokasi memori lebih rendah dibandingkan Newtonsoft. Menggunakan [JsonPropertyName] untuk pemetaan properti. Pilihan default untuk proyek .NET 6+ baru. Tidak mendukung semua fitur Newtonsoft seperti JsonPath atau penanganan referensi secara bawaan.
Newtonsoft.Json
Library JSON .NET yang asli (Json.NET). Menggunakan [JsonProperty] untuk pemetaan properti. Mendukung skenario yang lebih kompleks: serialisasi polimorfik, kueri JsonPath, konverter kustom dengan fleksibilitas lebih tinggi. Masih umum digunakan di codebase lama dan proyek yang membutuhkan fitur yang tidak dimiliki System.Text.Json.
Contoh Kode
Contoh-contoh ini menunjukkan cara mendefinisikan dan menggunakan kelas C# yang dihasilkan dari JSON, menggunakan kedua library serialisasi utama, beserta cara mengotomatiskan pembuatan dari command line.
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; }
// }
Apa perbedaan antara JsonPropertyName dan JsonProperty?
JsonPropertyName adalah atribut dari System.Text.Json, serializer .NET bawaan. JsonProperty berasal dari Newtonsoft.Json (Json.NET), sebuah library pihak ketiga. Keduanya memetakan nama properti C# ke nama field JSON, tetapi berada di namespace yang berbeda dan tidak dapat dipertukarkan. Gunakan JsonPropertyName untuk proyek .NET 6+ baru dan JsonProperty jika proyek Anda sudah bergantung pada Newtonsoft.
Setiap objek bersarang menjadi kelas C# tersendiri. Properti di kelas induk menggunakan kelas bersarang tersebut sebagai tipenya. Misalnya, jika JSON Anda memiliki field "address" yang berisi objek dengan "street" dan "city", generator akan membuat kelas Address dan menentukan tipe properti tersebut sebagai Address di kelas induk.
Apa yang terjadi pada array JSON yang mengandung tipe beragam?
Generator menyimpulkan tipe elemen array dari elemen non-null pertama. Jika array mengandung tipe yang beragam (string dan angka bercampur), tipe yang dihasilkan akan menjadi List'<'object'>'. Dalam praktiknya, respons API yang terstruktur dengan baik jarang mencampur tipe dalam satu array.
Bisakah saya menggunakan kelas yang dihasilkan dengan Entity Framework?
Ya, tetapi Anda perlu menambahkan anotasi khusus EF seperti atribut [Key], [Required], atau [Column]. Kelas yang dihasilkan memberikan struktur properti; jadikan sebagai scaffold dan tambahkan konfigurasi EF di atasnya. EF juga mengharapkan konstruktor tanpa parameter, yang sudah dimiliki kelas yang dihasilkan secara default.
Bagaimana nilai null dalam JSON dikonversi ke C#?
Nilai null JSON menghasilkan tipe object? karena generator tidak dapat menentukan tipe yang dimaksud dari null saja. Setelah pembuatan, Anda harus mengganti object? dengan tipe nullable yang tepat (string?, int?, atau kelas tertentu?) berdasarkan pengetahuan Anda tentang skema API.
Apakah JSON camelCase otomatis dipetakan ke properti C# PascalCase?
Ya. Generator mengonversi kunci JSON seperti "firstName" menjadi properti PascalCase seperti FirstName dan menambahkan atribut [JsonPropertyName("firstName")]. Ini memastikan serializer memetakan antara dua konvensi penamaan tersebut secara otomatis selama proses serialisasi dan deserialisasi.
Bagaimana cara menangani JSON dengan field opsional di C#?
Jadikan tipe properti nullable (misalnya, string? atau int?) dan tetapkan nilai default. Dengan System.Text.Json, Anda juga dapat mengonfigurasi JsonSerializerOptions.DefaultIgnoreCondition untuk melewati nilai null selama serialisasi. Generator menghasilkan tipe non-nullable secara default, jadi tinjau dan sesuaikan nullability berdasarkan kontrak API Anda.