问题 从接口强制执行可序列化而不强制类在C#中自定义序列化


我有一个接口,定义了一些我希望某些类实现的方法。

公共接口IMyInterface
{
    治法;
    方法b;
}

另外,我希望实现此接口的所有类都可以序列化。如果我更改接口定义以实现ISerializable如下...:

公共接口IMyInterface:ISerializable
{
    治法;
    方法b;
}

...据我所知,所有类现在必须显式实现序列化,因为如果实现ISerializable,则必须实现GetObjectData成员(以及反序列化所需的构造函数)。

如何坚持使用我的界面的类是可序列化的,但不强制他们自定义实现序列化?

谢谢, 将


7903
2017-12-11 17:34


起源



答案:


似乎没有办法做到这一点,但我希望有。

请注意两件事:

  • Serializable属性不能从基类继承, 即使基类被标记为 抽象。

  • 从技术上讲不需要 可序列化属性,IF 你是 使用XmlSerializer 因为它 不使用对象图。


10
2018-02-04 20:37





如果要使用默认序列化,则需要添加SerializableAttribute。一种替代方法是使用抽象类而不是接口,然后将SerializableAttribute添加到抽象类。如果您正在实现自己的自定义序列化,那么您希望实现ISerializable,否则坚持使用SerializableAttribute。


1
2017-12-11 18:14





编写一个实现ISerializationSurrogate的类,并使用它来序列化不可序列化的类或者您不确定序列化实现的类。


1
2017-11-02 16:21





您可以编写自定义FxCop规则并验证它的签入。


0
2017-12-11 17:36





谢谢你的回复。如果能够强制从接口派生的类来实现序列化而不使用它然后强制它们进行自定义序列化会很好,但似乎不可能。


0
2018-01-18 22:51