82
Chương 2: Thao tác dữ liệu
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.BinaryFormatter
•
System.Runtime.Serialization.Formatters.Soap.SoapFormatter
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.
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
public class BinarySerializationExample {
public static void Main() {
// Tạo và cấu hình ArrayList để tuần tự hóa.
ArrayList people = new ArrayList();
people.Add("Phuong");