【问题标题】:Enforcing serializable from an interface without forcing classes to custom serialize in C#从接口强制可序列化而不强制类在 C# 中自定义序列化
【发布时间】:2010-09-26 11:44:29
【问题描述】:

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

公共接口IMyInterface { 方法A; 方法B; }

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

公共接口 IMyInterface : ISerializable { 方法A; 方法B; }

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

我怎样才能坚持使用我的接口的类是可序列化的,但又不强制它们自定义实现序列化?

谢谢, 会

【问题讨论】:

    标签: c# interface serialization


    【解决方案1】:

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

    注意两点:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            感谢您的回复。如果能够强制从接口派生的类实现序列化而无需这样做,然后强制它们自定义序列化,那就太好了,但这似乎是不可能的。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-05-15
              • 1970-01-01
              • 1970-01-01
              • 2022-01-02
              • 2018-03-06
              • 2013-10-19
              • 1970-01-01
              相关资源
              最近更新 更多