Подтвердить что ты не робот

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

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

public interface IMyInterface
{
    MethodA;
    MethodB;
}

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

public interface IMyInterface : ISerializable
{
    MethodA;
    MethodB;
}

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Похоже, что это не способ, но я бы хотел, чтобы он был.

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

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

  • Вам не нужна техническая помощь Атрибут Serializable, IF, вы с помощью XmlSerializer, потому что он не использует графиков объектов.

Ответ 3

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

Ответ 4

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

Ответ 5

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