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:

csharp
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
<?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:

  1. Baris 1 (new XmlSerializer(typeof(...))): serializer dibuat untuk tipe BarangXml; konstruktor membangun metadata pemetaan, sehingga instance sebaiknya disimpan dan dipakai ulang.
  2. Baris 3 (new StringWriter()): tujuan serialisasi berupa TextWriter; gunakan StreamWriter bila hasil ingin ditulis langsung ke file.
  3. Baris 4 (Serialize(writer, barang)): serializer menulis deklarasi XML, elemen akar <BarangXml>, lalu satu elemen anak per properti sesuai urutan deklarasi.
  4. 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.