Обеспечение сериализации из интерфейса без принудительной сериализации классов в C #

У меня есть интерфейс, который определяет некоторые методы, которые я хотел бы реализовать в определенных классах.

public interface IMyInterface
{
    MethodA;
    MethodB;
}

Кроме того, я хотел бы, чтобы все классы, реализующие этот интерфейс, были сериализуемыми. Если я изменю определение интерфейса для реализации ISerializable, как показано ниже ...:

public interface IMyInterface : ISerializable
{
    MethodA;
    MethodB;
}

... все классы теперь должны явно реализовывать сериализацию, насколько мне известно, поскольку, если вы реализуете ISerializable, вы должны реализовать член GetObjectData (и необходимый конструктор для десериализации).

Как я могу настоять на том, чтобы классы, использующие мой интерфейс, были сериализуемыми, но не заставляя их настраивать сериализацию?

Спасибо, Уилл


person WillH    schedule 11.12.2008    source источник


Ответы (5)


Кажется, нет способа сделать это, но я бы хотел, чтобы это было.

Однако обратите внимание на две вещи:

  • Атрибут Serializable не может быть унаследован от базового класса, даже если базовый класс отмечен как абстрактный.

  • Вам технически не нужен атрибут Serializable, ЕСЛИ вы используете XmlSerializer, потому что он не использует графы объектов.

person Thrash505    schedule 04.02.2009

Если вы хотите использовать сериализацию по умолчанию, вам нужно добавить SerializableAttribute. Альтернативой может быть использование абстрактного класса вместо интерфейса, а затем добавление атрибута SerializableAttribute к абстрактному классу. Если вы реализуете свою собственную сериализацию, тогда вы хотите реализовать ISerializable, в противном случае придерживайтесь SerializableAttribute.

person Ricardo Villamil    schedule 11.12.2008

Напишите класс, реализующий ISerializationSurrogate, и используйте его для сериализации классов, которые не сериализуемы или в которых вы не уверены в реализации сериализации.

person Rudy    schedule 02.11.2011

Вы можете написать собственное правило FxCop и проверять по нему проверки.

person Cristian Libardo    schedule 11.12.2008

Спасибо за ответы. Было бы неплохо иметь возможность заставить классы, производные от интерфейса, реализовать сериализацию без этого, а затем заставить их настраивать сериализацию, но это кажется невозможным.

person WillH    schedule 18.01.2009