JSON ke Kelas C#

Masukkan contoh JSON untuk mendapatkan kelas POCO dalam bahasa C# yang siap digunakan dalam berkas .cs. Alat ini memilih tipe data yang tepat, menangani objek terstruktur dengan definisi kelas tambahan, mendukung tipe referensi yang dapat bernilai null, serta menghasilkan atribut System.Text.Json atau Newtonsoft.Json tergantung pada proyek Anda.

Cara Mengonversi JSON ke C#

  1. 1

    Lampirkan JSON

    Satu sampel saja sudah cukup. Penggunaan beberapa sampel dapat meningkatkan kemampuan inferensi untuk nilai yang tidak pasti (nullable) dan elemen dalam array.

  2. 2

    Pilih gaya

    System.Text.Json (.NET 6+) atau Newtonsoft.Json (versi lama). Nama properti PascalCase yang menggunakan `[JsonPropertyName]` untuk format JSON camelCase.

  3. 3

    Pilih versi C# target

    C# 10+ untuk namespace yang berlaku pada level rekaman dan file; C# 8 untuk tipe referensi nullable; atau versi sebelumnya untuk kompatibilitas maksimal.

  4. 4

    Salin kelas-kelas tersebut

    Satu kelas akar ditambah kelas terstruktur untuk setiap bentuk objek, semuanya tersedia dalam satu file yang siap digunakan langsung dalam proyek Anda.

Contoh hasil eksekusi

Untuk masukan:

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

Keluaran 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!;
}

Pemetaan Tipe

JSON Tipe C#
string string
integer int (atau long untuk nilai yang melebihi batas maksimum integer)
nomor (desimal) double (atau decimal jika diaktifkan)
boolean bool
null object? (atau digabungkan dengan data saudara)
Tanggal ISO-8601 DateTime (atau DateOnly)
String berbentuk GUID Guid
deretan string List<string>
objek kelas bersarang

Opsi atribut

  • System.Text.Json ([JsonPropertyName("foo")]), lebih disarankan untuk .NET 6+ dan proyek-proyek baru.
  • Newtonsoft.Json ([JsonProperty("foo")]), digunakan untuk proyek lama atau ketika Anda memerlukan fitur khusus Newtonsoft.
  • Tidak ada, nama properti sesuai persis dengan kunci JSON (hanya berlaku jika kunci JSON sudah menggunakan format PascalCase).

Kesalahan Umum

  • Gunakan int untuk bidang yang berpotensi melebihi batas nilai. Jika JSON Anda mengandung nilai yang melebihi batas int.MaxValue, gunakan long. Generator akan secara otomatis beralih ke format long ketika mendeteksi nilai yang besar.
  • [JsonIgnore] tidak tersedia untuk properti komputasi. Jika Anda menambahkan properti bantu ke kelas yang dihasilkan, hiasi properti tersebut dengan [JsonIgnore]; jika tidak, properti tersebut akan diserialisasi saat proses penghasilan kelas selesai. – Mengabaikan proses pemrosesan data yang tidak bergantung pada konteks budaya (culture-invariant parsing). Field dari decimal seharusnya dideserialisasi menggunakan CultureInfo.InvariantCulture; hal ini dilakukan secara default oleh System.Text.Json dan juga oleh Newtonsoft dengan pengaturan global.
  • Mengandalkan generator hanya dengan satu sampel. Kemampuan untuk menghasilkan nilai nol (nullability) dan tipe elemen array diperkirakan berdasarkan data yang dilihatnya. Selalu lakukan pemeriksaan keabsahan terhadap anotasi nullable sesuai dengan perilaku API yang sebenarnya.

Pertanyaan yang Sering Diajukan

Untuk proyek baru yang menggunakan .NET 6+ atau versi lebih tinggi, gunakan System.Text.Json, fitur ini lebih cepat, sudah terintegrasi secara bawaan, dan kini mendukung hampir semua fitur yang tersedia di Newtonsoft. Gunakan Newtonsoft untuk proyek lama atau ketika Anda memerlukan fitur-fitur khususnya (seperti resolver kontrak kustom, JObject, serta penanganan dinamis).

Dalam C# 10+, rekaman sangat cocok digunakan untuk DTO yang tidak dapat diubah, karena memberikan kesetaraan nilai dan sintaks yang ringkas. Kelas lebih ideal ketika diperlukan kemampuan untuk melakukan modifikasi atau kompatibilitas dengan sistem lama. Alat ini memungkinkan Anda memilih salah satu dari keduanya.

Jika proyek Anda menggunakan tipe referensi yang dapat bernilai nol (C# 8+), bidang yang terdeteksi bernilai nol dalam setiap sampel akan diberi label string?, int?, dan sebagainya. Tanpa fitur NRT, kemungkinan nilai menjadi nol hanya ditandai untuk tipe nilai saja (misalnya int?).

Array campuran dengan berbagai bentuk objek tidak dapat direpresentasikan secara langsung dalam C# yang bertipe kuat. Alat ini akan menyimpulkan kelas dasar umum atau (sebagai cadangan) object; untuk array campuran, biasanya diperlukan perancangan ulang struktur JSON-nya.

Alat Terkait

Alat ini tersedia dalam bahasa lain