Data JSON umumnya datang dari luar aplikasi: respons API, file konfigurasi, atau pesan antrean. Method JsonSerializer.Deserialize<T> mengubah teks tersebut menjadi object bertipe T. Pekerjaan utama deserializer adalah mencocokkan nama anggota JSON dengan nama properti class, dan pencocokan ini bersifat sensitif huruf besar-kecil secara default. Nilai yang tidak cocok tidak memicu galat, sehingga kita harus memahami perilakunya sebelum memasangnya di jalur produksi.
Pencocokan Nama Properti #
Kebanyakan API web mengirim JSON dengan gaya camelCase, sementara properti class C# lazim ditulis PascalCase. Contoh berikut memperlihatkan akibat perbedaan gaya tersebut pada class ProdukJson yang sama:
string jsonCamel = """{"nama":"Kopi Gayo","harga":45000}""";
ProdukJson camel = JsonSerializer.Deserialize<ProdukJson>(jsonCamel);
Console.WriteLine($"camelCase -> Nama='{camel.Nama}', Harga={camel.Harga}");
string jsonPascal = """{"Nama":"Kopi Gayo","Harga":45000}""";
ProdukJson pascal = JsonSerializer.Deserialize<ProdukJson>(jsonPascal);
Console.WriteLine($"PascalCase -> Nama='{pascal.Nama}', Harga={pascal.Harga}");Output yang Dihasilkan:
camelCase -> Nama='', Harga=0
PascalCase -> Nama='Kopi Gayo', Harga=45000Mari kita bedah hasil di atas:
- JSON camelCase: deserializer mencari properti bernama
namapersis; classProdukJsonhanya punyaNama, sehingga pencocokan gagal dan properti memakai nilai default""serta0. - JSON PascalCase: nama anggota JSON identik dengan nama properti class, sehingga kedua nilai terisi penuh.
- Tanpa exception: kegagalan pencocokan tidak melempar galat; deserializer melanjutkan dengan diam-diam, dan bug jenis ini baru terasa ketika data hilang di lapisan bisnis.