C# 在会话或备用解决方案中存储linq到sql对象

C# 在会话或备用解决方案中存储linq到sql对象,c#,asp.net,linq-to-sql,session-state,datacontractserializer,C#,Asp.net,Linq To Sql,Session State,Datacontractserializer,我正在会话状态服务器上存储会话。(将其存储在PROC中不起作用。) 我试图使用visual studio(2010)中内置的linq to sql设计器生成的类来存储和表示网站中的一些数据 在某些情况下,我希望将其中一些对象放入会话中,以便能够在另一个网页上访问它们 问题是,当我这样做时,我得到一个错误,linq到sql的某些部分是不可序列化的 我已经将我的datacontext“序列化模式”设置为“单向”,不管这意味着什么 然后,我创建了一些能够更好地进行序列化的替代对象,用包含一些xml的基

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

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

在某些情况下,我希望将其中一些对象放入会话中,以便能够在另一个网页上访问它们

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

我已经将我的datacontext“序列化模式”设置为“单向”,不管这意味着什么

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

仍然是错误

然后,我尝试使用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时,我遇到了一个问题,因为某种原因,它将大约43000字节的xml文本切掉

这是相当混乱的

一定有更好的办法

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


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

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

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