Сериализуемый атрибут .NET - PullRequest
0 голосов
/ 23 ноября 2010

Я использую двоичную сериализацию в .NET для клонирования объектов.Любой из моих собственных классов я должен пометить атрибутом <Serializable()>, чтобы сериализатор мог обработать класс.Однако, поскольку эта функция будет использоваться для любого объекта, мне было интересно:

Можно ли сериализатору сериализовать объект, даже если он не отмечен атрибутом <Serializable()>?Если нет, есть ли способ «автоматически применить» атрибут к любому классу?

Редактировать.Моя главная проблема заключается в том, что мне нужно иметь возможность клонировать объекты POCO, которые уже существуют в .NET Framework.Все ли они уже сериализуемы?

Ответы [ 5 ]

2 голосов
/ 23 ноября 2010

Не зная, как реализован класс, его сериализовать небезопасно, и это может привести к едва различимым объектам. Вот почему разработчик класса должен намеренно добавить атрибут Serializable, чтобы среда выполнения знала, что это безопасная операция. Автоматическое добавление этого атрибута в любой класс, вероятно, является плохой идеей.

Если вам действительно нужно сериализовать класс, который не Serializable, вы можете сделать это вручную:

  1. Придумайте, как преобразовать класс задачи в альтернативное представление и обратно.
  2. Используйте этот другой класс для сериализации, конвертируя туда и обратно при необходимости.

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

0 голосов
/ 23 ноября 2010

Рассмотрите возможность использования typeof (yourType) .IsSerializable ...

0 голосов
/ 23 ноября 2010

Вы можете использовать отражение, чтобы перебрать свойства любого класса / экземпляра. Но вы должны сделать собственный сериализатор.

0 голосов
/ 23 ноября 2010

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

0 голосов
/ 23 ноября 2010

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

...