Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Sử dụng XmlSerializer trong C#


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 stream
  • XmlSerializer - 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 public và 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)