Perilaku default JsonSerializer belum tentu sesuai kontrak API yang kita hadapi: endpoint mungkin mewajibkan camelCase, sedangkan manusia membaca payload dengan lebih nyaman bila diindentasi. JsonSerializerOptions menjadi titik konfigurasi tunggal untuk kebutuhan tersebut; instance options dikirim sebagai argumen kedua method Serialize maupun Deserialize.
Opsi yang Sering Dipakai #
PropertyNamingPolicy = JsonNamingPolicy.CamelCase: mengubah nama properti menjadi camelCase saat menulis.WriteIndented = true: menambahkan indentasi dua spasi agar payload mudah dibaca.PropertyNameCaseInsensitive = true: pencocokan nama saat membaca tidak lagi sensitif huruf besar-kecil.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull: propertinulltidak ditulis sama sekali.
Contoh Penggunaan Opsi #
var opsi = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
var produk = new ProdukJson { Nama = "Kopi Gayo", Harga = 45000 };
Console.WriteLine(JsonSerializer.Serialize(produk, opsi));
string jsonCamel = """{"nama":"Kopi Gayo","harga":45000}""";
ProdukJson hasil = JsonSerializer.Deserialize<ProdukJson>(jsonCamel, opsi);
Console.WriteLine($"{hasil.Nama} - {hasil.Harga}");Output yang Dihasilkan:
{
"nama": "Kopi Gayo",
"harga": 45000
}
Kopi Gayo - 45000Mari kita bedah baris demi baris:
- Baris 1-6 (
new JsonSerializerOptions ...): object options menyimpan dua keputusan: penamaan camelCase dan indentasi. - Baris 8 (
Serialize(produk, opsi)): serializer menulis"nama"dan"harga"dengan huruf kecil, satu anggota per baris. - Baris 10-11 (
Deserialize ... , opsi): opsi yang sama dipakai saat membaca; JSON camelCase kini dipetakan penuh ke properti PascalCase tanpa data hilang. - Baris 12 (
Console.WriteLine ...): nilaiKopi Gayo - 45000membuktikan round-trip dua arah dengan satu konfigurasi; class tidak perlu disentuh sama sekali.
Opsi lain tetap dapat ditambahkan ke object yang sama, misalnya DefaultIgnoreCondition untuk menghilangkan properti null dari payload. Prinsipnya satu: seluruh keputusan bentuk JSON berada di satu tempat, sehingga perubahan kontrak cukup dilakukan pada satu titik dan tidak tersebar di seluruh kode pemanggil.