У меня есть интерфейс, который определяет некоторые методы, которые я хотел бы реализовать в определенных классах.
public interface IMyInterface
{
MethodA;
MethodB;
}
Кроме того, я хотел бы, чтобы все классы, реализующие этот интерфейс, были сериализуемыми. Если я изменю определение интерфейса для реализации ISerializable, как показано ниже ...:
public interface IMyInterface : ISerializable
{
MethodA;
MethodB;
}
... все классы теперь должны явно реализовывать сериализацию, насколько мне известно, поскольку, если вы реализуете ISerializable, вы должны реализовать член GetObjectData (и необходимый конструктор для десериализации).
Как я могу настоять на том, чтобы классы, использующие мой интерфейс, были сериализуемыми, но не заставляя их настраивать сериализацию?
Спасибо, Воля





Вы можете написать собственное правило FxCop и проверять по нему проверки.
Если вы хотите использовать сериализацию по умолчанию, вам необходимо добавить SerializableAttribute. Альтернативой может быть использование абстрактного класса вместо интерфейса, а затем добавление атрибута SerializableAttribute к абстрактному классу. Если вы реализуете свою собственную сериализацию, тогда вы хотите реализовать ISerializable, в противном случае придерживайтесь SerializableAttribute.
Спасибо за ответы. Было бы неплохо иметь возможность заставить классы, производные от интерфейса, реализовать сериализацию без этого, а затем заставить их настраивать сериализацию, но это кажется невозможным.
Кажется, нет способа сделать это, но я бы хотел, чтобы это было.
Однако обратите внимание на две вещи:
Атрибут Serializable не может быть унаследован от базового класса, даже если базовый класс отмечен как Аннотация.
Ты технически не нужен Сериализуемый атрибут, IF ты используя XmlSerializer потому что это не использует графы объектов.
Напишите класс, реализующий ISerializationSurrogate, и используйте его для сериализации классов, которые не сериализуемы или в которых вы не уверены в реализации сериализации.