? Bạn cần lưu một đối tượng khả-tuần-tự-hóa và các trạng thái của nó vào file, sau đó giải tuần tự hóa khi cần.
» Sử dụng một formatter để tuần tự hóa đối tượng và ghi nó vào một System.IO.FileStream. Khi cần truy xuất đối tượng, sử dụng formatter cùng kiểu để đọc dữ liệu được-tuần-tự-hóa từ file và giải tuần tự hóa đối tượng. Thư viện lớp .NET Framework cung cấp các hiện thực formatter sau đây để tuần tự hóa đối tượng theo dạng nhị phân hay SOAP:
•System.Runtime.Serialization.Formatters.Binary.B inaryFormatter
•System.Runtime.Serialization.Formatters.Soap.Soa pFormatter
Lớp BinaryFormatter và SoapFormatter có thể được sử dụng để tuần tự hóa một đối tượng của bất kỳ kiểu nào được gắn với đặc tính System.SerializableAttribute. BinaryFormatter sinh ra một stream dữ liệu nhị phân mô tả đối tượng và trạng thái của nó, trong khi SoapFormatter sinh ra một tài liệu SOAP.
Cả hai lớp BinaryFormatter và SoapFormatter đều hiện thực giao diện System.Runtime. Serialization.IFormatter, giao diện này định nghĩa hai phương thức: Serialize và Deserialize.
•Serialize: nhận một tham chiếu System.Object và một tham chiếu System.IO.Stream làm đối số, tuần tự hóa Object và ghi nó vào Stream.
•Deserialize: nhận một tham chiếu Stream làm đối số, đọc dữ liệu của đối tượng được-tuần-tự-hóa từ Stream, và trả về một tham chiếu Object đến đối tượng được-giải-tuần-tự-hóa. Bạn phải ép tham chiếu Object này về kiểu thích hợp.
Để gọi các phương thức Serialize và Deserialize của lớp BinaryFormatter, mã lệnh của bạn phải được cấp phần tử SerializationFormatter của lớp System.Security.Permissions. SecurityPermission.
Để gọi các phương thức Serialize và Deserialize của lớp SoapFormatter, mã lệnh của bạn phải được cấp quyền “tin tưởng tuyệt đối” (full trust) vì assembly System.Runtime. Serialization.Formatters.Soap.dll (lớp SoapFormatter được khai báo bên trong assembly này) không cho phép các mã lệnh chỉ được-tin-cậy-một-phần (partially trusted caller) sử dụng nó. Tham khảo mục 13.1 để có thêm thông tin về mã lệnh được-tin-cậy-một-phần.
Lớp BinarySerializationExample dưới đây minh họa cách sử dụng lớp BinaryFormatter để tuần tự hóa một System.Collections.ArrayList chứa danh sách tên người vào một file. Sau đó, ArrayList được giải tuần tự hóa từ file và nội dung của nó sẽ được hiển thị trong cửa sổ Console.

Visual C# Code:
  1. using System.IO;
  2. using System.Collections;
  3. using System.Runtime.Serialization.Formatters.Binary;
  4.  
  5. public class BinarySerializationExample {
  6.  
  7.     public static void Main() {
  8.        
  9.         // Tạo và cấu hình ArrayList để tuần tự hóa.
  10.         ArrayList people = new ArrayList();
  11.         people.Add("Phuong");
  12.         people.Add("Phong");                    
  13.         people.Add("Nam");
  14.  
  15.         // Tuần tự hóa đối tượng ArrayList.
  16.         FileStream str = File.Create("people.bin");
  17.         BinaryFormatter bf = new BinaryFormatter();
  18.         bf.Serialize(str, people);
  19.         str.Close();
  20.        
  21.         // Giải tuần tự hóa đối tượng ArrayList.
  22.         str = File.OpenRead("people.bin");
  23.         bf = new BinaryFormatter();
  24.         people = (ArrayList)bf.Deserialize(str);
  25.         str.Close();
  26.        
  27.         // Hiển thị nội dung của đối tượng ArrayList
  28.         // đã-được-giải-tuần-tự-hóa.
  29.         foreach (string s in people) {
  30.            
  31.             System.Console.WriteLine(s);
  32.         }
  33.     }  
  34. }
Bạn có thể sử dụng lớp SoapFormatter theo cách như được trình bày trong lớp BinarySerializationExample ở trên, chỉ cần thay mỗi thể hiện của lớp BinaryFormatter bằng thể hiện của lớp SoapFormatter và thay đổi chỉ thị using để nhập không gian tên System.Runtime.Serialization.Formatters.Soap. Ngoài ra, bạn cần thêm một tham chiếu đến System.Runtime.Serialization.Formatters.Soap.dll khi biên dịch mã. File SoapSerializationExample.cs trong đĩa CD đính kèm sẽ trình bày cách sử dụng lớp SoapFormatter.


Trích từ "Các giải pháp lập trình C#"