610
Chương 16: Các giao diện và mẫu thông dụng
// Nạp địa chỉ từ kho lưu trữ.
}
return address;
}
set {
address = value;
}
}
}
Đối với phần lớn các kiểu tùy biến, việc sử dụng đặc tính
SerializableAttribute
và
NonSerializedAttribute
sẽ đáp ứng đủ nhu cầu tuần tự hóa của bạn. Nếu cần kiểm soát quá
trình tuần tự hóa, bạn cần hiện thực giao diện
ISerializable
. Các lớp formatter sử dụng logic
khác nhau khi tuần tự hóa và giải tuần tự hóa thể hiện của các kiểu có hiện thực
ISerializable
. Để hiện thực đúng
ISerializable
, bạn phải:
•
Khai báo rằng kiểu của bạn có hiện thực giao diện
ISerializable
.
•
Áp dụng đặc tính
SerializableAttribute
vào khai báo kiểu như vừa được mô tả;
không sử dụng
NonSerializedAttribute
vì nó sẽ không có tác dụng.
•
Hiện thực phương thức
ISerializable.GetObjectData
(được sử dụng trong quá trình
tuần tự hóa), phương thức này nhận các kiểu đối số sau:
▪
System.Runtime.Serialization.SerializationInfo
▪
System.Runtime.Serialization.StreamingContext
•
Hiện thực một phương thức khởi dựng không công khai (được sử dụng trong quá trình
giải tuần tự hóa), phương thức này nhận cùng đối số như phương thức
GetObjectData
.
Nhớ rằng, nếu bạn có ý định dẫn xuất một số lớp từ lớp khả-tuần-tự-hóa thì phương
thức khởi dựng này phải là
protected
.
•
Nếu bạn tạo một lớp khả-tuần-tự-hóa từ một lớp cơ sở cũng có hiện thực
ISerializable
, thì phương thức
GetObjectData
và phương thức khởi dựng (dùng để
giải tuần tự hóa) của bạn phải gọi các phương thức tương đương trong lớp cha.
Trong quá trình tuần tự hóa, formatter sẽ gọi phương thức
GetObjectData
và truyền cho nó
các tham chiếu
SerializationInfo
và
StreamingContext
.
•
Bạn phải đổ dữ liệu cần tuần tự hóa vào đối tượng
SerializationInfo
. Lớp
SerializationInfo
cung cấp phương thức
AddValue
dùng để thêm dữ liệu. Với mỗi lần
gọi
AddValue
, bạn phải chỉ định tên dữ liệu (tên này sẽ được sử dụng trong quá trình
giải tuần tự hóa để thu lấy dữ liệu). Phương thức
AddValue
có đến 16 phiên bản nạp
chồng, cho phép bạn thêm nhiều kiểu dữ liệu khác nhau vào đối tượng
SerializationInfo
.