C# – Enforcing serializable from an interface without forcing classes to custom serialize in C#

c++interfaceserialization

I have an interface that defines some methods I would like certain classes to implement.

public interface IMyInterface
{
    MethodA;
    MethodB;
}

Additionally I would like all classes implementing this interface to be serializable. If I change the interface definition to implement ISerializable as below…:

public interface IMyInterface : ISerializable
{
    MethodA;
    MethodB;
}

…all classes must now explicitly implement serialization as far as I am aware, since if you implement ISerializable you must implement the GetObjectData member (and the necessary constructor to deserialize).

How can I insist classes using my interface be serializable, but without forcing them to custom implement serialization?

Thanks,
Will

Best Solution

There does not seem to be a way to do this, but I wish there were.

Note two things though:

  • The Serializable attribute can not be inherited from a base class, even if the base class is marked as abstract.

  • You don't technically need the Serializable attribute, IF you are using an XmlSerializer because it does not make use of object graphs.

Related Question