Nếu tôi muốn sắp xếp một đối tượng, tôi phải sử dụng thuộc tính [Serializable]
và tất cả biến thành viên sẽ được ghi vào tệp. Những gì tôi không biết cách làm phiên bản, ví dụ: nếu tôi thêm biến thành viên mới (đổi tên biến hoặc chỉ xóa biến) và sau đó tôi mở (deserialize) tệp, làm thế nào tôi có thể xác định phiên bản tệp/đối tượng để tôi có thể đặt thành viên mới hoặc di chuyển kiểu nào đó? Làm thế nào tôi có thể xác định rằng biến được khởi tạo trong quá trình tải hay không (bỏ qua bởi deserializer).Nối tiếp và phiên bản đối tượng trong C#
Tôi biết rằng có các phương pháp tiếp cận khoan dung phiên bản và tôi có thể đánh dấu các biến có thuộc tính [OptionalField(VersionAdded = 1)]
. Nếu tôi mở một tệp cũ, khung công tác sẽ bỏ qua tùy chọn này (biến mới) và nó sẽ chỉ bằng 0/null. Nhưng một lần nữa làm thế nào tôi có thể xác định nếu biến được khởi tạo bởi tải hoặc nó đã bị bỏ qua.
Tôi có thể viết số phiên bản lớp/đối tượng vào luồng. Sử dụng phương thức ISerializable
và trong phương thức constructor(SerializationInfo oInfo, StreamingContext context)
đọc số phiên bản này. Điều này sẽ cho tôi biết chính xác phiên bản lớp trong luồng là gì.
Tuy nhiên tôi dự kiến rằng loại phiên bản như vậy đã được triển khai bởi khung công tác phát trực tuyến trong C#. Tôi đã cố gắng để có được phiên bản lắp ráp từ SerializationInfo
nhưng nó luôn luôn được thiết lập để phiên bản hiện tại không phải phiên bản được sử dụng khi đối tượng đã được lưu.
Cách tiếp cận ưa thích là gì? Tôi thấy rất nhiều bài viết trên mạng, nhưng tôi không thể tìm thấy một giải pháp tốt cho việc này đề cập đến phiên bản ...
Any help is appreciated Cảm ơn, Abyss
+1 để đề xuất sử dụng phương pháp khác với serialization .NET. – Theraot