Как применить Serializable атрибут глобально? - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно применить атрибут [Serializable ()] для всех классов, но я хочу знать, есть ли способ сделать классы Serializable глобально вместо применения этого атрибута индивидуально для всех классов?

1 Ответ

0 голосов
/ 17 сентября 2018

Нет, не существует способа применить это глобально - вам нужно посетить каждый тип и добавить атрибут.

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

Я должен применить атрибут [Serializable()] ко всем классам

говорит мне, что вы не в настоящее время контролируете, кто вы есть

Кроме того, поскольку [Serializable] отображается (обычно) на BinaryFormatter, важно знать, что существует много способов (при использовании BinaryFormatter), в которыхможно случайно перетащить неожиданные части вашей модели в сериализованные данные.Наиболее известными из них являются «события», но есть и другие.

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

  • это только содержит данные, которые вам необходимыдоступно в сеансе
  • , помечено [Serializable], если ваш провайдер нуждается в этом - или в каких-либо других метаданных, необходимых для единственной цели, для которой он существует
  • it не не имеет каких-либо событий
  • он не включает никаких инструментов, таких как контексты ORM, соединения с базой данных и т. Д.
  • в идеале он неизменен (чтобы избежать путаницы в том, что произойдет, если вы выполнителокальные изменения, которые иногда могут вести себя по-разному для оперативной памяти по сравнению с постоянным хранилищем)
  • просто простые базовые объекты - очень легко рассуждать, что
  • можно повторять отдельно к вашим основным объектам домена, поэтому у вас не будет никаких неожиданных разрывов, потому что вы изменили что-то невинно выглядящее в своей модели домена, и это сломало сериализатор
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...