tôi đã đọc của Microsoft Best Practices: Data Contract Versioning, và họ tuyên bố:DataContractSerializer: tại sao không xóa thành viên?
Không tháo các thành viên dữ liệu trong các phiên bản sau, ngay cả khi isRequired tài sản còn lại tại khách sạn mặc định của sai trong các phiên bản trước.
Có ai đề xuất bất kỳ lý do nào cho điều này không? Họ không xây dựng. Vì họ nói rằng nó tốt để thêm các thành viên dữ liệu trong một phiên bản sau này, có vẻ như việc loại bỏ cũng sẽ ổn - một cách hiệu quả, phiên bản cũ sẽ thấy nó như là một add.
Sự khác biệt, tôi giả sử, là bạn phải thêm thành viên mới vào cuối (sử dụng thuộc tính Order trên DataMemberAttribute), trong khi tài sản bị loại bỏ có thể sẽ không ở cuối. Nhưng họ cũng nói rằng các thành viên còn thiếu sẽ bị bỏ lại ở giá trị mặc định của họ trong quá trình tải, vì vậy rõ ràng là các thành viên bị thiếu là OK.
Tôi đang thiếu gì? Tôi sẽ gây ra vấn đề gì về phiên bản interop (cả khả năng tương thích về phía trước và tương thích ngược) nếu tôi đã lỗi thời một tính năng của sản phẩm và xóa thuộc tính [DataMember] đi kèm với nó?
Ngoài ra, nếu tôi quyết định rằng tôi không quan tâm đến tính tương thích về phía trước (tức là, nếu tôi không quan tâm đến các phiên bản cũ hơn đang mở các tệp mới hơn), sẽ có bất kỳ vấn đề nào vẫn được áp dụng không?