Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Рассмотрим использование типа (yourtype) .isserializable ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top