2012-01-19 6 views
0

У меня есть один XML-документ, который я хочу сохранить внутри сеанса, поэтому в каждом столбце мне больше не нужно загружать его с его физического пути. Мы используем государственный сервер.Можно ли сохранить объект xmlDocument в сеансе? Как сделать серализацию?

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

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

Мой код-то вроде этого:

строка resumeSection = string.Empty;

resumeSection = resume.GetXMLSection(1) 

XmlDocument xmlDoc = new XmlDocument(); 

xmlDoc.LoadXml(resumeSection); 

Session["USERXML"] = xmloc; 

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

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

ответ

1

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

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

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

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

this прошлое SO сообщение может также ответить на ваш вопрос в какой-то степени

+0

Как сделать сериализацию Befor хранения его переменной сессии? –

+0

взгляните на ссылку, предоставленную мной в ответ http://rtur.net/blog/post/2008/03/16/Serializing-XMLDocument-to-binary-format.aspx – Devjosh

+0

подготовьте свой xmlDocument так, как показано здесь, а затем назначьте свой недавно подготовленный объект xmlDocument сеансу таким же образом, который вы назначили – Devjosh

0

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

Я заметил, что если вы храните объект как xml/dataset/class, вы можете столкнуться с этой ошибкой. Я попытался сохранить его как универсальный объект и, похоже, работает. На том же коде, который хранил набор данных, я имел ошибку, сохраняя как общий объект, отлично работает.

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

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"); 
Смежные вопросы