2010-06-02 25 views
6

Tôi đã có một lớp 'MyDataTable' được thừa kế từ System.Data.DataTableTại sao không phải My .Net Object Serializable?

Tôi đã thực hiện ISerializable trong lớp học của tôi và có một 'Overrides Public Sub GetObjectData ...'

Nhưng khi tôi cố gắng serialize một đối tượng của 'MyDataTable' Tôi nhận được một lỗi nói rằng 'MyDataTable' không được đánh dấu là serializable.

Nếu tôi sử dụng DataTable thay thế - mã của tôi sẽ tuần tự hóa chính xác. Nếu tôi thêm thuộc tính có thể tuần tự hóa vào lớp 'MyDataTable' - nó sẽ tuần tự hóa chính xác, nhưng tôi được thông báo là không cần thiết nếu tôi triển khai ISerializable.

Ai đó có thể chỉ cho tôi đúng hướng không?

Trả lời

8

Ai nói với bạn nó là không cần thiết để thêm SerializableAttribute là không chính xác:

Áp dụng thuộc tính SerializableAttribute ngay cả khi lớp cũng thực hiện các giao diện ISerializable để kiểm soát quá trình tuần tự.

Và từ ISerializable entry (em gia tăng):

Bất kỳ lớp nào có thể được tuần tự phải được đánh dấu bằng SerializableAttribute. Nếu một lớp cần kiểm soát quá trình tuần tự hóa của nó, nó có thể thực hiện giao diện ISerializable.

+0

Cảm ơn bạn đã phản hồi nhanh chóng. Thử nghiệm của tôi dường như hỗ trợ điều đó và các ví dụ tôi đã tìm thấy trong MSDN dường như cũng đồng ý. –

1

Bạn cần thêm SerializableAttribute, ngay cả khi bạn triển khai ISerializable. Mặc dù đây thảo luận về một quy tắc FxCop, đây là từ http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx:

Để được công nhận bởi các chung runtime ngôn ngữ như serializable, loại phải được đánh dấu với thuộc tính SerializableAttribute thậm chí nếu loại sử dụng một tùy chỉnh serialization thường xuyên thông qua triển khai giao diện ISerializable .

Các vấn đề liên quan