Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 37 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
37
Dung lượng
266,43 KB
Nội dung
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC 1 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 9: Serialization • Kỹ thuật chuyển đổi với BinaryFormatter • Kỹ th ậth ể đổi ớiX lS i li • Kỹ th u ật c h uy ể n đổi v ới X m lS er i a li zer • Kỹ thuật chuyển đổi lớp đối tượng thông qua lớpgiaotiếp ISerializable lớp giao tiếp ISerializable 2 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Serialization • Nhiều ứng dụng cầnlưutrữ và trao đổidữ liệu đượclưu trong các đốitượng với nhau • Serialization (chuyển đổi) : là tiến trình biến đổivàtáitạo các đốitượng để chúng có thể đ l t ữ à t đổi iữ á ứ d đ ược l ưu t r ữ v à t rao đổi g iữ ac á c ứ ng d ụng. • .NET framework cung cấpnhiềukỹ thuật chuyển đổi để đơn giản hóa tác vụ này chuyển đổi để đơn giản hóa tác vụ này 3 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Serialize • Deserialize • Deserialize 4 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Serialize − Tiến trình chuyển một đối tượng thành chuỗi tuần tự Tiến trình chuyển một đối tượng thành chuỗi tuần tự các byte để có thể lưutrữ hoặctraođổi. − Các bướcthựchiện • Tạo đốitượng Stream lưukếtquả chuyển đổi • Tạo đốitượng BinaryFormatter • Gọiphương thức BinaryFormatter.Serialize để chuyển đổi, lưukếtquả vào Stream 5 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Demo serialize − Tạo đối tượng string data=“This must be store in a file”; Tạo đối tượng lưukếtquả chuyển đổi ố FileStream fs=new FileStream(“SerializedString.Data”,F ileMode.Create); − Tạo đ ố itượng BinaryFormatter Chuyển đổi và BinaryFormatter bf=new BinaryFormatter(); bf Serialize(fs data); − Chuyển đổi và lưukếtquả bf . Serialize(fs , data); fs.Close(); 6 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Deserialize − Tiến trình chuyểnchuỗituầntự các byte thu đượctừ Tiến trình chuyển chuỗi tuần tự các byte thu được từ quá trình serialize thành đối tượng ban đầu − Các bước thực hiện • Tạo Stream đọc kết quả của quá trình serialize • Tạo đối tượng BinaryFormatter • Tạo đối tượng lưu dữ liệu sau khi chuyển đổi • Gọi phương thức BinaryFormatter.Deserialize để chuyển đ ổ i l ạ i và é p ki ể u p hù h ợp với ki ể u của đối tư ợ n g ban đầu 7 ạ p p ợp ợ g TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Demo deserialize − Tạo stream đọckết ả h đ ừ á FileStream fs=new qu ả t h u đ ượct ừ qu á trình serialize − Tạo đối tượng FileStream(“SerializedString. Data”,FileMode.Create); BinaryFormatter bf=new Tạo đối tượng BinaryFormatter − Tạo đốitượn g lưukết ể ổ BinaryFormatter bf=new BinaryFormatter(); string data=“”; g quả chuy ể n đ ổ i − Chuyển đổivàlưukết quả data=(string)bf.Deserialize(fs); fs Close(); 8 quả fs . Close(); Console.WriteLine(data); TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Tạolớpcóthể serialize − Thêm thuộc tính Serializable vào lớp cần chuyển đổi Thêm thuộc tính Serializable vào lớp cần chuyển đổi , .NET framework sẽ tựđộng serialize. − Có thể kiểmsoát q uá trình serialize củacáclớ p để ầ [Serializable] q p tăng hiệuquả / đáp ứng các yêu c ầ ucủa ứng dụng. public class ShoppingCartItem{ public int productId; public decimal price; public int quantity; public decimal total; 9 … } TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Kỹ thuật chuyển đổi với BinaryFormatter • Vô hiệu hóa chuyển [ Serializable ] Vô hiệu hóa chuyển đổi các thành phần của lớp [] public class ShoppingCartItem{ public int productId; public decimal price; − Những giá trị tạm, thuộc tính tính toán Thêm th ộc tính public decimal price; public int quantity; public decimal total; NonSer[ialized] − Thêm th u ộc tính NonSerialized trước khai báo public ShoppingCartItem(int _procId,decimal _price,int _quan){ productId=_procId; − Thành phần NonSerialized không đượckhởitạokhi price=_price; quantity=_quan; total=price+quantity; 10 được khởi tạo khi deserialize. } } [...]... public decimal total; Cho phép[OnSerializing] void CalculateTotal(StreamingContext sc){ hiệu chỉnh đối tượng trư c và sau serialize (deserialize) total=price*quantity; } Yêu c u cho cc phương th c xử lý cc sự kiện • • • [OnDeserialization] void CheckTotal(StreamingContext sc){ C tham số là if (total==0){ StreamingContext đối tượng CalculateTotal(sc); Không trả về kết quả } C th ộ tí h t thu c tính... StreamingContext context){ productId = info.GetInt32("Product ID"); price = info GetDecimal("Price"); info.GetDecimal( Price ); public Int32 productId; quantity = info.GetInt32("Quantity"); public decimal price; public Int32 quantity; [NonSerialized] public decimal total; public ShoppingCartItem(Int32 _productId, decimal _price, int _quantity){ productId = _productId; price = _price; total = price * quantity;... thu c tính OnDeserialized trư c phương th c 32 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Custom Serialization • Cc sự kiện trong Serialization Serialize Serialization begins Deserialization begins [OnSerializing] [OnDeserializing] Serialization occurs Deserialization occurs [OnSerialized] Deserialize IDeserializationCallback, OnDeserialization Serialization completed [OnSerialized] Serialization. .. Serialization completed 33 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Custom Serialization • Cc sự kiện trong Serialization [Serializable] − public class ShoppingCartItem : ISerializable { Cc sự kiện này là c ch tốt nhất và dễ dàng nhất để public Int32 productId; điều khiển tiến trình chuyển đổi đổi public decimal price; • • − public Int32 quantity; Không can thiệp vào serialization. ..TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Kỹ thuật chuyển đổi với BinaryFormatter • Tự động khởi tạo cc thành phần NonSerialized khi deserialize: − − Th c thi interface IDeserializationCallback Th c thi phương th c IDeserializationCallback.OnDeSerialization IDeserializationCallback OnDeSerialization 11 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Kỹ thuật chuyển đổi với... th c thi interface Iserializable • StreamingContext c 2 thu c tính: – Context: tham chiếu đến đối tượng chứa thông tin ngữ Context: c nh – St t : 1 tậ c hiệ chỉ ra nguồn/ đích c a đối tượ State: tập ờ hiệu hỉ State ồ / đí h ủ tượng đang đư c serialize/ deserialize 35 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Custom Serialization • C c cờ hiệu c a thu c tính State − − − − − − − − − CrossProcess... sự kiệ c n can thiệ thích ới kiện ầ thiệp } } 34 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Custom Serialization • Thay đổi ngữ c nh chuyển đổi − − − Khi serialize 1 đối tượng: không c n quan tâm đích đến Trong vài trường hợp: serialize và deserialize sẽ kh c nhau phụ thu c vào đích đến C u tr c StreamingContext cung c p thông tin đích g g p g đến c a đối tượng đư c serialize cho lớp... khởi tạo cc thành phần NonSerialized khi deserialize: [Serializable] public class ShoppingCartItem : IDeserializationCallback{ … [NonSerialized] public decimal total; public ShoppingCartItem(int _procId,decimal _price,int _quan){ … total=price+quantity; } void IDeserializationCallback.OnDeserialization(object sender){ p q y total=price*quantity; } } 12 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG... XML Serialization − − − Khả năng giao tiếp rộng Thân thiện với người dùng, dễ dàng đ c và hiệu chỉnh Khả năng tương thích phiên bản cao 18 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Kỹ thuật chuyển đổi với XmlSerializer • Hạn chế c a XML Serialization − − Chỉ c thể chuyển đổi cc dữ liệu public Không thể chuyển đổi đối tượng đồ thị, biểu đồ 19 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM... public int productId; p public decimal price; p public int quantity; public decimal total; public ShoppingCartItem(){ Serialize p p 100 12.0 5 } } 25 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG TÂM TIN H C Kỹ thuật chuyển đổi với XmlSerializer • Tạo lớp c thể chuyển đổi − − Nếu chỉ . ứng c c yêu c ầ ucủa ứng dụng. public class ShoppingCartItem{ public int productId; public decimal price; public int quantity; public decimal total; 9 … } TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN TP.HCM TRUNG. deserialize: − Th c thi interface IDeserializationCallback − Th c thi phương th c IDeserializationCallback OnDeSerialization IDeserializationCallback . OnDeSerialization 11 TRƯỜNG ĐẠI H C KHOA H C TỰ NHIÊN. chế c a XML Serialization − Chỉ c thể chuyển đổicácdữ liệu public Chỉ c thể chuyển đổi c c dữ liệu public − Không thể chuyển đổi đối tượng đồ thị, biểu đồ 19 TRƯỜNG ĐẠI H C KHOA