Я храню свою сессию на сервере состояний сессии.(Хранение в inproc не работает.)
Я пытаюсь использовать классы, сгенерированные linq-to-sql-дизайнером, встроенным в Visual Studio (2010), для хранения и представления некоторых данных вмой веб-сайт.
В некоторых случаях я хочу поместить некоторые из этих объектов в сеанс, чтобы иметь доступ к ним на другой веб-странице.
Проблема заключается в том, что когда я это делаю,Я получаю сообщение об ошибке, что некоторые части содержимого linq-to-sql не сериализуемы.
Я установил свой текстовый режим «режим сериализации» на «однонаправленный», что бы это ни значило.
ТогдаЯ создал некоторый альтернативный объект, который можно было бы лучше сериализовать, заменив некоторые поля sql-xmldata, которые были переведены в поля linq.xelement, базовой строкой, содержащей некоторое количество xml.В этом случае объекты содержат только базовые типы.
Все еще ошибки.
Затем я попытался с помощью DataContractJsonSerializer получить байт [], который я могу поместить в сеанс:
byte[] buf = null;
var ds = new DataContractJsonSerializer(fi.GetType());
using (var ms = new MemoryStream())
{
using (var w = JsonReaderWriterFactory.CreateJsonWriter(ms))
{
ds.WriteObject(w, fi);
ms3.Position = 0;
buf = ms.ToArray();
}
}
return buf;
Проблема здесь в том, что Json-строка, кажется, обрезана в середине некоторого элемента и поэтому не может быть десериализована впоследствии.Когда я попробовал использовать XmlWriter, у меня возникла проблема, заключающаяся в том, что он почему-то обрезал текст xml размером около 43000 байт.
Это оказывается довольно грязно.
Должно бытьлучший способ.
Одна идея, которую я получил, состояла в том, чтобы просто отправить объекты во временную таблицу сервера sql, получить guid из строки сервера sql, сохранить guid в сеансе вместо всего набора объектов,а затем перечитайте данные с сервера sql на другой странице.
Какое лучшее решение действительно работает?