2009-12-02 49 views
20

我有一个实体类的完整列表,我需要使Serializable(由于在SQL中存储会话状态,但这是另一回事)。如果基类被标记为可序列化,所有子类都被标记了吗?

我已经添加了属性[Serializable],似乎都很好。

我所有的实体类都从相同的基类扩展而来。 如果我将基类标记为Serializable,这是否意味着所有的孩子都被标记为可序列化?

谢谢

回答

32

不,属性不被继承。

当您扩展类时,可能会添加可能无法序列化的功能,因此.NET框架无法为您假设所有扩展可串行化基类的东西都是可序列化的。

这就是为什么你必须明确说明每个类别的[Serializable]属性。

+1

谢谢,这是有道理的,并为迅速的反应:) – Russell 2009-12-02 05:48:37

6

不可以,每个人都必须特别标记为[Serializable]。

此外,如果您打算将对象序列化为派生类型的XML,就好像它是基类型一样,您还需要一个[XmlInclude]属性。

EG:

[Serializable] 
public class BaseClass : ParentClass 
{ 
} 

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

(二进制序列,像什么是用于会话,不需要这个)

+0

感谢的是序列化通过ASP .net为SQL Session状态完成,因此不确定是否需要XmlInclude,但谢谢。 – Russell 2009-12-02 05:47:54

+0

嗯,XmlInclude仅用于xml序列化(不用于会话状态)。当我读到你的问题时,肯定错过了那部分。 – fyjham 2009-12-02 09:35:05

相关问题