Dulu pengembang .NET hampir selalu menambahkan library pihak ketiga seperti Newtonsoft.Json untuk mengolah JSON. Sejak .NET Core 3.0, platform menyertakan serializer resmi bernama System.Text.Json. Pada .NET 9, namespace ini sudah tersedia di setiap project tanpa instalasi NuGet tambahan, sehingga cukup menulis using System.Text.Json dan seluruh API dapat langsung dipakai.
Tiga Kelompok API #
| API | Peran | Cocok untuk |
|---|---|---|
JsonSerializer | Memetakan class ke JSON dan sebaliknya | Kontrak data yang tipenya jelas |
JsonDocument | Membaca JSON menjadi pohon node read-only | Payload dinamis tanpa class |
Utf8JsonWriter / Utf8JsonReader | Menulis dan membaca token JSON secara streaming | Payload besar dan jalur kritis kinerja |
Bab ini memperkenalkan kelompok kedua; bab-bab berikutnya memakai JsonSerializer secara mendalam, sedangkan kelompok streaming cukup kita kenali dulu.
Membaca JSON Tanpa Class #
Kadang kita hanya perlu mengambil dua nilai dari payload tanpa mendefinisikan class. JsonDocument menyelesaikan kebutuhan tersebut:
string json = """{"nama":"Budi","umur":25}""";
using JsonDocument dokumen = JsonDocument.Parse(json);
JsonElement akar = dokumen.RootElement;
Console.WriteLine(akar.GetProperty("nama").GetString());
Console.WriteLine(akar.GetProperty("umur").GetInt32());Output yang Dihasilkan:
Budi
25Mari kita bedah baris demi baris:
- Baris 1 (
string json = """..."""): raw string literal C# 11 menyimpan payload JSON tanpa perlu menggandakan tanda kutip. - Baris 3 (
JsonDocument.Parse(json)): parser memindai teks JSON dan menyusun pohon node di memori; kata kunciusingmemastikan memori yang dipinjam dikembalikan segera. - Baris 4 (
RootElement): variabelakarmenunjuk node paling luar, dalam contoh ini sebuah object JSON. - Baris 6-7 (
GetProperty ...): methodGetPropertymengambil node bernamanamadanumur, laluGetStringdanGetInt32membaca nilainya sesuai tipe masing-masing.