我将 session 存储在 session 状态服务器上。 (将其存储在进程中不起作用。)
我正在尝试使用 visual studio (2010) 中内置的 linq-to-sql-designer 生成的类,以便对象在我的网站中存储和表示一些数据。
在某些情况下,我想将其中一些对象放入 session 中,以便能够在另一个网页上访问它们。
问题是,当我这样做时,我收到一个错误,提示 linq-to-sql 的某些部分不可序列化。
我已将我的数据上下文“序列化模式”设置为“单向”,无论那是什么意思。
然后我创建了一些能够更好地序列化的备用对象,用包含一些 xml 的基本字符串替换了一些转换为 linq.xelement 字段的 sql-xmldata 字段。然后对象只包含基本类型。
仍然是错误。
然后我尝试使用 DataContractJsonSerializer 来获取可以放入 session 中的字节 []:
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 存储在 session 中而不是整个对象集中,然后从另一个页面上的sql server。
什么是实际有效的更好解决方案?
最佳答案
在读取 MemoryStream 之前尝试刷新 JsonWriter:
...
ds.WriteObject(w, fi);
w.Flush();
ms3.Position = 0;
buf = ms.ToArray();
...
关于c# - 在 session 或替代解决方案中存储 linq-to-sql 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583446/