在会话中存储link -to-sql对象,或其他解决方案



我将会话存储在会话状态服务器上。(将它存储在proc中不起作用)

我试图使用由内建到visual studio(2010)的linq-to-sql设计器生成的类来存储和表示我网站中的一些数据。

在某些情况下,我想把这些对象中的一些放到会话中,以便能够在另一个网页上访问它们。

问题是,当我这样做时,我得到一个错误,某些部分的链接到sql的东西是不可序列化的。

我已经将我的数据上下文"序列化模式"设置为"单向",不管这意味着什么。

然后我创建了一些能够更好地序列化的替代对象,替换了一些被转换为linq的sql-xmldata字段。使用包含一些xml的基本字符串的Xelement字段。对象只包含基本类型。

仍然错误。

然后我尝试使用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-string似乎在某个元素的中间被截断了,因此之后不能反序列化。当我尝试使用XmlWriter时,我遇到了一个问题,它由于某种原因切断了大约43000字节的xml文本。

这看起来很乱。

一定有更好的办法。

我得到的一个想法是简单地将对象提交到一些临时的sql server表,从sql server行获取guid,将guid存储在会话中而不是整个对象集合中,然后在另一页上从sql server重新读取数据。

真正有效的更好的解决方案是什么?

尝试在读取MemoryStream之前刷新JsonWriter:

...
ds.WriteObject(w, fi);
w.Flush();
ms3.Position = 0;
buf = ms.ToArray();
...

相关内容

最新更新