Нет, не существует способа применить это глобально - вам нужно посетить каждый тип и добавить атрибут.
Однако: применение этого глобально - действительно, действительно плохая идея.Точное знание того, что вы сериализуете, когда и почему действительно важно - будь то состояние сеанса, первичное сохранение, кэш или любой другой вариант использования.Утверждения типа
Я должен применить атрибут [Serializable()]
ко всем классам
говорит мне, что вы не в настоящее время контролируете, кто вы есть
Кроме того, поскольку [Serializable]
отображается (обычно) на BinaryFormatter
, важно знать, что существует много способов (при использовании BinaryFormatter
), в которыхможно случайно перетащить неожиданные части вашей модели в сериализованные данные.Наиболее известными из них являются «события», но есть и другие.
Когда я вижу этот тип вопроса, я вижу, что вы используете типы из своей основной модели данных как то, что выпереводим в сессионное состояние, но, честно говоря: это ошибка - и приводит к таким вопросам.Вместо этого гораздо более приемлемый подход заключается в создании отдельной модели, которая существует исключительно для этой цели :
- это только содержит данные, которые вам необходимыдоступно в сеансе
- , помечено
[Serializable]
, если ваш провайдер нуждается в этом - или в каких-либо других метаданных, необходимых для единственной цели, для которой он существует - it не не имеет каких-либо событий
- он не включает никаких инструментов, таких как контексты ORM, соединения с базой данных и т. Д.
- в идеале он неизменен (чтобы избежать путаницы в том, что произойдет, если вы выполнителокальные изменения, которые иногда могут вести себя по-разному для оперативной памяти по сравнению с постоянным хранилищем)
- просто простые базовые объекты - очень легко рассуждать, что
- можно повторять отдельно к вашим основным объектам домена, поэтому у вас не будет никаких неожиданных разрывов, потому что вы изменили что-то невинно выглядящее в своей модели домена, и это сломало сериализатор