2009-12-02 34 views
20

Tôi có toàn bộ danh sách các lớp thực thể mà tôi cần phải tạo Serializable (do lưu trữ trạng thái phiên trong SQL, nhưng đó là một câu chuyện khác).Nếu lớp cơ sở được đánh dấu Serializable là tất cả các lớp con được đánh dấu quá?

Tôi đã thêm thuộc tính [Serializable] và tất cả dường như vẫn ổn.

Tất cả các lớp thực thể của tôi mở rộng từ cùng một lớp cơ sở. Nếu tôi đánh dấu lớp cơ sở là Serializable, điều này có nghĩa là tất cả trẻ em cũng được đánh dấu là Serializable?

Cảm ơn

Trả lời

32

Không, thuộc tính không được kế thừa.

Khi bạn mở rộng lớp, bạn có thể thêm các đối tượng địa lý không thể tuần tự hóa do đó khung công tác .NET không thể giả định cho bạn rằng mọi thứ mở rộng lớp cơ sở tuần tự cũng có thể tuần tự hóa được.

Đó là lý do tại sao bạn phải nêu rõ thuộc tính [Serializable] trên mỗi lớp riêng lẻ.

+1

Cảm ơn, có ý nghĩa, và cảm ơn cho trả lời nhanh chóng :) – Russell

6

Không, mỗi người sẽ phải được đánh dấu là [Serializable] cụ thể.

Ngoài ra nếu bạn có ý định sắp xếp một đối tượng vào XML có kiểu bắt nguồn như thể đó là loại cơ sở, bạn cũng sẽ cần thuộc tính [XmlInclude].

EG:

[Serializable] 
public class BaseClass : ParentClass 
{ 
} 

[Serializable] 
[XmlInclude(typeof(BaseClass))] 
public class ParentClass 
{ 
} 

(serialization nhị phân, giống như những gì được sử dụng cho các phiên, không cần điều này)

+0

Các serializing là thực hiện dưới mui xe của ASP. net cho trạng thái phiên SQL, vì vậy không chắc chắn nếu tôi cần XmlInclude, nhưng cảm ơn. – Russell

+0

Ah, XmlInclude chỉ dành cho xml serialization (Không được sử dụng cho trạng thái phiên). Phải bỏ lỡ phần đó khi tôi đọc câu hỏi của bạn. – fyjham

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