我需要使用C
序列化一个类BinaryFormatter
。
所以我将C
标记为[Serializable]
C
继承了抽象 B
类。
B NOT 标记为[Serializable]
B
继承A
类,
A
为[Serializable]
,并且还实现了ISerializable
;
我们可以拥有什么样的情况?
AProperty
将被序列化
BProperty
将不序列化(?)
CProperty
将被序列化
答案 0 :(得分:2)
您的修改所有内容;如果A
实施ISerializable
,则他们所有实施ISerializable
。这样,您就可以使用自定义序列化,因此GetObjectData
和A
中的B
和序列化构造函数代码确定了 完全 的行为/ C
/ ISerializable
。
原始答案,当没有提及BinaryFormatter
序列化通常基于运行时实际对象的类型,[Serializable]
(映射到B
)是字段序列化程序。但是,如果[Serializable]
未标记为BinaryFormatter
,则无法序列化 ISerializable
(除非它是A
);这样:
A
,则所有C
字段都将被序列化B
,则会抛出异常BinaryFormatter
,因为它是抽象的;但如果是,那也会引发它)如果不使用BinaryFormatter
(并且我个人认为BinaryFormatter
在大多数情况下都不是一个好选择),那么行为将取决于特定的序列化器。
我的建议:使用不同的序列化程序;有很多。几乎所有(IMO)选择都比{{1}}更好。
答案 1 :(得分:0)
尝试使用其他序列化技术,例如Google的Protofol Buffers,它可以帮助您重建整个应用程序,当您更改AProperty类时,该应用程序会消耗此序列化对象。
JSON是另一种选择。
答案 2 :(得分:0)
如果A是一个基类并且它是可选择的,那么B将自动变为可引发的。