Могу ли я сохранить объект xmlDocument в сеансе? Как сделать разделение? - PullRequest
0 голосов
/ 19 января 2012

У меня есть один XML-документ, который я хочу сохранить в сеансе, поэтому при каждом возвращении мне не нужно загружать его с физического пути. Мы используем государственный сервер.

Когда я пытался сохранить его в сеансе, я получаю сообщение об ошибке:

Сведения об исключении: System.Runtime.Serialization.SerializationException: Тип 'System.Xml.XmlDocument' в сборке 'System.Xml, версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089' не помечен как сериализуемый.

Мой код примерно такой:

string resumeSection = string.Empty;

resumeSection = resume.GetXMLSection(1)

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(resumeSection);

Session["USERXML"] = xmloc;

Как сделать серализацию?

Как я получаю ниже ошибка Невозможно сериализовать состояние сеанса. В режимах «StateServer» и «SQLServer» ASP.NET сериализует объекты состояния сеанса, и в результате несериализуемые объекты или объекты MarshalByRef не допускаются. То же ограничение применяется, если аналогичная сериализация выполняется в пользовательском хранилище состояний сеанса в режиме «Пользовательский».

Ответы [ 2 ]

1 голос
/ 19 января 2012

Когда вы сохраняете какой-либо объект в сеансе, он должен быть помечен [serealizable], поэтому вы должны сериализовать ваш объект перед сохранением его в сеансе или в viewstate.

, если честно, вы не должны помещать сложные типы вВ состоянии сеанса вы должны хранить только простые типы или легкие бизнес-объекты, а не объекты, такие как XmlDocument.

. Я думаю, что лучшим способом будет использование настраиваемой сериализации.Если класс не слишком большой, вы можете сохранить XmlDocument в строку, а затем просто сохранить это значение при сериализации экземпляра.Затем, при десериализации, вы можете просто извлечь это из экземпляра SerializationInfo.

, вы можете быстро получить представление из здесь

этого прошлый пост также может ответить на ваш вопрос в некоторой степени

0 голосов
/ 09 декабря 2014

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

Вот упрощенный пример:

    public static void InsertSessionObject(string item, object obj)
    {
        HttpContext.Current.Session.Add(item, obj);
    }

    public static object GetSessionObject(string item)
    {
        return HttpContext.Current.Session[item];
    }

    public static void RemoveSessionObject(string item)
    {
        HttpContext.Current.Session.Remove(item);
    }

    DataSet lastResults = GetDatasetResults();

    InsertSessionObject("myDataset", lastResults);

    lastResults = (DataSet)GetSessionObject("myDataset");

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