【发布时间】:2013-01-22 18:49:00
【问题描述】:
我试图创建一个暗示 [Serializable] 的属性,但我注意到这个 SerializableAttribute 类是密封的。
在 Java 中,可以创建一个继承自 Serializable 接口的接口(例如,MyInterface),因此MyInterface 的所有子类也可以序列化,甚至它的子子类也是如此.
假设我正在创建一个 ORM,并且我希望客户将他们的实体类注释为 [DatabaseEntity],但为了确保实体是可序列化的,我还需要要求他们使用额外的 [Serializable] 来为其类添加属性看起来不太紧凑和整洁。
我想知道为什么 SerializableAttribute 类是 sealed 以及为什么有 Inherited=false 这意味着可序列化类的子类将不可序列化,除非它明确表示。这些设计选择背后的动机是什么?
【问题讨论】:
-
您不需要
serializable来使类可序列化。它仅由 BinaryFormatter 使用。其他序列化器可以愉快地序列化您的 ex、xmlSerializer、DatacontractSerializer、DatacontractJsonSerializer、JavascriptSerializer 等类。 -
但我希望我的课程同时从
myObject.getType().IsSerializable返回true。如果您认为是这样,请添加您的方法作为答案。 -
你需要什么
myObject.getType().IsSerializable。默认情况下,每个类都是可序列化的(与serializable属性无关)。 -
Ahmet,如果您只是想要一个标有“可序列化”的标记,那么实现 ISerializable 并测试它是否存在。我不知道,也许你有一些你想要允许序列化的类,而你没有,你想要一种方便的方式来区分它们。
标签: c#