Thông tin tài liệu
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 c c phương th c xử lý c c 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 • C c 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 • C c sự kiện trong Serialization [Serializable] − public class ShoppingCartItem : ISerializable { C c 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 c c 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 c c 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 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 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
Ngày đăng: 23/05/2014, 15:59
Xem thêm: nền tảng lập trình c bài 9 serialization, nền tảng lập trình c bài 9 serialization