Обеспечение сериализации из интерфейса без принудительной настройки классов для пользовательской сериализации в C # - PullRequest
11 голосов
/ 11 декабря 2008

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

public interface IMyInterface
{
    MethodA;
    MethodB;
}

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

public interface IMyInterface : ISerializable
{
    MethodA;
    MethodB;
}

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

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

Спасибо, Будет

Ответы [ 5 ]

10 голосов
/ 04 февраля 2009

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

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

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

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

1 голос
/ 02 ноября 2011

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

1 голос
/ 11 декабря 2008

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

0 голосов
/ 19 января 2009

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

0 голосов
/ 11 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...