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
Namaditulis 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
nulltetap ditulis; enum ditulis sebagai angka. - Urutan anggota mengikuti urutan deklarasi properti di class, sehingga perubahan urutan kode mengubah urutan payload.
Contoh Serialisasi #
var produk = new ProdukJson { Nama = "Kopi & Gula", Harga = 25000 };
string json = JsonSerializer.Serialize(produk);
Console.WriteLine(json);Output yang Dihasilkan:
{"Nama":"Kopi \u0026 Gula","Harga":25000}Mari kita bedah baris demi baris:
- Baris 1 (
new ProdukJson ...): object dibuat dengan propertiNamaberisi teks yang memuat karakter&. - Baris 3 (
Serialize(produk)): serializer menulis propertiNamadanHargasesuai urutan deklarasi di class. - Hasil (
\u0026): encoder default mengubah&menjadi\u0026agar payload tetap aman disisipkan ke halaman web atau skrip; saat deserialization,\u0026otomatis dikembalikan menjadi&. - Hasil (
25000): angkaintditulis 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.