Serialization/Deserialization cho phép giao tiếp với ứng dụng khác bằng cách gửi/nhận dữ liệu. Với XmlSerializer, bạn có thể kiểm soát cách đối tượng được mã hóa thành XML.
Các lớp cần thiết
StreamWriter- ghi streamXmlSerializer- serialize/deserialize XML
Serialize (Đối tượng → XML)
using System;
using System.IO;
using System.Xml.Serialization;
public class Settings
{
public string Username { get; set; }
public int Port { get; set; }
public bool AutoConnect { get; set; }
}
class Program
{
static void Main()
{
var settings = new Settings
{
Username = "admin",
Port = 8080,
AutoConnect = true
};
string path = "settings.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (StreamWriter writer = new StreamWriter(path))
{
serializer.Serialize(writer, settings);
}
Console.WriteLine("Đã serialize ra file: " + path);
}
}
File XML kết quả (settings.xml)
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="https://www.w3.org/2001/XMLSchema">
<Username>admin</Username>
<Port>8080</Port>
<AutoConnect>true</AutoConnect>
</Settings>
Deserialize (XML → Đối tượng)
using (StreamReader reader = new StreamReader(path))
{
Settings loaded = (Settings)serializer.Deserialize(reader);
Console.WriteLine("Username: " + loaded.Username);
Console.WriteLine("Port: " + loaded.Port);
}
Tùy chỉnh XML (Attributes)
public class Settings
{
[XmlAttribute("user")]
public string Username { get; set; }
[XmlElement("port-number")]
public int Port { get; set; }
[XmlIgnore]
public string Password { get; set; } // Không serialize
}
Lưu ý
- Class phải
publicvà cóparameterless constructor - Chỉ serialize
public properties/fields - Dùng
usingđể tự động đóng stream - Hiệu suất: XmlSerializer chậm hơn JsonSerializer (System.Text.Json)