Method JsonSerializer.Serialize memetakan setiap properti public sebuah object menjadi anggota JSON. Pemetaan ini mengikuti aturan default yang konsisten, dan kita perlu memahaminya sebelum menyalahartikan hasil serialisasi sebagai bug. Contoh berikut memakai class ProdukJson dengan dua properti Nama dan Harga.

Perilaku Default Serializer #

  • Nama properti dipertahankan persis, sehingga Nama ditulis sebagai "Nama", bukan "nama".
  • Hasil berupa satu baris tanpa spasi agar ukuran payload sekecil mungkin.
  • Karakter yang berisiko pada konteks JavaScript dan HTML di-escape, misalnya & menjadi \u0026.
  • Properti bernilai null tetap ditulis; enum ditulis sebagai angka.
  • Urutan anggota mengikuti urutan deklarasi properti di class, sehingga perubahan urutan kode mengubah urutan payload.

Contoh Serialisasi #

csharp
var produk = new ProdukJson { Nama = "Kopi & Gula", Harga = 25000 };

string json = JsonSerializer.Serialize(produk);
Console.WriteLine(json);

Output yang Dihasilkan:

text
{"Nama":"Kopi \u0026 Gula","Harga":25000}

Mari kita bedah baris demi baris:

  1. Baris 1 (new ProdukJson ...): object dibuat dengan properti Nama berisi teks yang memuat karakter &.
  2. Baris 3 (Serialize(produk)): serializer menulis properti Nama dan Harga sesuai urutan deklarasi di class.
  3. Hasil (\u0026): encoder default mengubah & menjadi \u0026 agar payload tetap aman disisipkan ke halaman web atau skrip; saat deserialization, \u0026 otomatis dikembalikan menjadi &.
  4. Hasil (25000): angka int ditulis tanpa tanda kutip sesuai aturan tipe JSON; hanya teks dan enum tertentu yang memakai tanda kutip di JSON.

Perilaku default ini konsisten untuk setiap pemanggilan, sehingga payload yang sama selalu menghasilkan teks yang sama. Ketika kontrak endpoint menuntut bentuk lain, seperti camelCase, kita tidak mengubah class melainkan mengatur serializer; cara tersebut dibahas pada bab JSON Options dan Konverter.