Сериализация коллекции ASP.NET Control - PullRequest
5 голосов
/ 31 декабря 2008

Мне было поручено преобразовать существующий сайт ASP.NET из управления сессиями InProc в сервер состояний ASP.NET.

Конечно, это означает, что все, что хранится в Сессии, должно быть сериализуемым.

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

Если полностью не переписать, как работает страница, чтобы избежать необходимости хранить коллекцию элементов управления в сеансе, есть ли у кого-нибудь хитрость / решение для создания сериализации сериализуемой коллекции?

Ответы [ 3 ]

7 голосов
/ 31 декабря 2008

Переписать страницу. Вы поблагодарите себя позже. Несомненно, возникнут и другие проблемы, если первоначальный «программист» (а я здесь использую этот термин свободно) решил, что было бы неплохо сохранить иерархию элементов управления в сеансе.

2 голосов
/ 31 декабря 2008

Не хранить контрольные коллекции в состоянии сеанса. У Тесс много статей на эту тему, например, , эта .

0 голосов
/ 31 декабря 2008

Первый ответ, который приходит на ум, - это частичное переписывание (я не думаю, что будет простой ответ на этот вопрос). Если это небольшое количество типов элементов управления, напишите свои собственные элементы управления, которые наследуются от этих элементов управления, а также реализуйте ISerializable. Затем, используя поиск и замену, замените элементы управления страницы вашими версиями. Если вы используете большое количество типов элементов управления, вы можете потратить больше времени на расширение стандартных типов, чем рефакторинг страницы.

Работа будет заключаться в сериализации и десериализации элементов управления при их инициализации, чтобы убедиться, что вы захватываете то, что вам нужно (значения TextBox, IsSelected и т. Д.).

Это, очевидно, хак, но если ваш приоритет на самом деле не переписывает функциональность этой конкретной страницы, это может сработать для вас. Затем, конечно, вам нужно добавить это решение к «техническому долгу», который накапливает ваше приложение, чтобы быть уверенным в том, что в какой-то момент он всегда находится на чьей-то радаре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...