ASP.NET MVC 3 - настраиваемый профиль и сохранение в State Server
У нас есть собственный класс профиля, унаследованный от ProfileBase. Мы хотели бы вставить этот объект в Session, чтобы избавить от необходимости продолжать извлекать его по запросу.
Мы используем ASP.NET State Server и получаем следующее исключение:
Тип "ProfileCommon" в сборке "App_Code.nvrow7px, версия =0.0.0.0, культура = нейтральный, PublicKeyToken= ноль" не помечен как сериализуемый.
Добавление Serializable в наш класс не помогло. Я предполагаю, что "ProfileCommon" в сообщении - это немного красной сельди, поскольку это не название нашего класса, но это nmae, когда вы используете Profiles с веб-проектами.
Является ли единственной возможностью преобразовать наш пользовательский объект профиля в сериализуемый тип для "транспорта" в и из сеанса?
ура
1 ответ
ASP.NET StateServer использует двоичную сериализацию для хранения любых графов объектов. Двоичная сериализация требует, чтобы каждый объект в графе объектов был сериализуемым (включая базовые типы объектов). Как таковая маркировка только вашего пользовательского профиля класса как [Serializable]
мало что сделает, если классы в его иерархии классов также не реализуют [Serializable]
ни ProfileBase
ни ProfileCommon
воплощать в жизнь [Serializable]
как таковой, невозможно сохранить любой класс, производный от них, в StateServer, не копируя эти данные в полностью сериализуемую иерархию классов или не преобразуя данные в другой формат (например, XML) и не сериализуя его.
Для дополнительной информации:
Объекты, хранящиеся в состоянии сеанса, должны быть сериализуемыми, если для режима задан StateServer. Для получения информации о сериализуемых объектах см. Класс SerializableAttribute.
Примените атрибут SerializableAttribute к типу, чтобы указать, что экземпляры этого типа могут быть сериализованы. Общеязыковая среда выполнения выдает исключение SerializationException, если какой-либо тип в графе сериализуемых объектов не имеет примененного атрибута SerializableAttribute.