Как уже говорили другие, синтаксис прост, вы можете просто рассматривать Session как хэш-карту или словарь, если хотите.
Session["userData"] = userData;
UserInfo userData = Session["userData"] as UserInfo;
Обратите внимание (так как вы новичок в C #), что ключевое слово "as" - это, по сути, обнуляемое приведение; если приведение не выполнено, ваша переменная userData будет иметь значение null.
Для дополнительного кредита (и в зависимости от требований вашего приложения) вы можете обернуть весь доступ к данным в объект DAO или репозиторий, и этот объект будет использовать Session изнутри. Расположение хранилища данных - это деталь реализации, в которой сам контроллер не нуждается; извлечение его из сеанса с использованием базы данных (или XML-файла, или статических объектов в памяти, или чего-либо еще) не должно иметь отношения к контроллеру (основной задачей которого является управление потоком приложений).