XML masih hidup di banyak sistem lama: layanan SOAP, berkas konfigurasi, dan pertukaran data antar lembaga. Kelas XmlSerializer di namespace System.Xml.Serialization memetakan object menjadi dokumen XML dengan syarat yang lebih ketat daripada System.Text.Json: hanya anggota public yang ikut, class harus punya constructor tanpa parameter, dan properti bersifat read-only tidak ikut terserialisasi. Arah sebaliknya bekerja sama rata: method Deserialize menerima TextReader atau Stream dan mengembalikan object baru bertipe yang diminta.
Contoh Serialisasi ke String #
Class contoh bernama BarangXml memiliki tiga properti public Kode, Nama, dan Stok:
var serializer = new XmlSerializer(typeof(BarangXml));
var barang = new BarangXml { Kode = "BRG-01", Nama = "Kopi Gayo", Stok = 12 };
using var writer = new StringWriter();
serializer.Serialize(writer, barang);
Console.WriteLine(writer.ToString());Output yang Dihasilkan:
<?xml version="1.0" encoding="utf-16"?>
<BarangXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Kode>BRG-01</Kode>
<Nama>Kopi Gayo</Nama>
<Stok>12</Stok>
</BarangXml>Mari kita bedah baris demi baris:
- Baris 1 (
new XmlSerializer(typeof(...))): serializer dibuat untuk tipeBarangXml; konstruktor membangun metadata pemetaan, sehingga instance sebaiknya disimpan dan dipakai ulang. - Baris 3 (
new StringWriter()): tujuan serialisasi berupaTextWriter; gunakanStreamWriterbila hasil ingin ditulis langsung ke file. - Baris 4 (
Serialize(writer, barang)): serializer menulis deklarasi XML, elemen akar<BarangXml>, lalu satu elemen anak per properti sesuai urutan deklarasi. - Elemen akar: nama class menjadi nama elemen akar; atribut
[XmlRoot("Barang")]mengubahnya menjadi<Barang>bila kontrak meminta nama lain.
Atribut lain menata bentuk elemen anak: [XmlElement("KodeBarang")] mengganti nama elemen properti, [XmlAttribute] menulis nilai sebagai atribut elemen akar alih-alih elemen anak, dan [XmlIgnore] menyembunyikan properti dari dokumen. Ketiga atribut tersebut tetap tidak mengubah class secara struktural, sehingga kode bisnis tidak perlu tahu bahwa propertinya ikut terserialisasi ke XML.