Tôi đang cố gắng deserialize "SomeClass" với một phiên bản cũ của một ứng dụng. Tôi nhận được điều này bên dưới ngoại lệDeserialization tương thích ngược
System.Runtime.Serialization.SerializationException: ObjectManager tìm thấy số lượng bản sửa lỗi không hợp lệ. Điều này thường chỉ ra một vấn đề trong Formatter.
Deserialization ném ngoại lệ khi tôi serialize phiên bản 0.9 và cố gắng deserialize sử dụng phiên bản 0.8. Tôi nghĩ rằng các thuộc tính OptionalField
sẽ làm các trick, nhưng nó đã không.
// Version 0.8
[Serializable()]
class Foo{
Bar b;
}
// Version 0.9
[Serializable()]
class Foo{
Bar b;
[OptionalField]
Zoo z;
}
Vì tôi không thể thay đổi phiên bản 0.8, làm cách nào để thêm nhiều trạng thái hơn vào đối tượng Foo sao cho các phiên bản trước có thể deserialize bất cứ điều gì họ có thể?
Bất kỳ con trỏ nào cũng sẽ thực sự được đánh giá cao.
Cập nhật 1 Bar và Zoo là các lớp khác được tuần tự hóa và chứa Hashtables và các công cụ có thể tuần tự khác. Mọi thứ đều có thể tuần tự hóa trong các lớp đó. Ngoài ra, tôi không có bất kỳ thanh chống.
Trường có tùy chọn hay không không liên quan ở đây - thực tế là việc tuần tự hóa không hoạt động trên các phiên bản, AFAIK; đó không phải để nói bạn _can't_ thêm thành viên, tất nhiên bạn có thể, nhưng, ví dụ, tôi không thể chỉ định một loại nguyên văn và deserialize mục serialized với hiện tại - một cái gì đó để làm với các hội đồng, hoặc các loại 'token ', Tôi nghĩ vậy. –
kareph, loại thực sự của 'Zoo' là gì? Tôi nhớ một số loại (mảng) chỉ không hoạt động đúng. –
Bạn có sẵn sàng sử dụng xml serialization hơn là serialization nhị phân không? Điều đó sẽ an toàn hơn cho phiên bản. – code4life