c# - 在 session 或替代解决方案中存储 linq-to-sql 对象

标签 c# asp.net linq-to-sql session-state datacontractserializer

我将 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/

相关文章:

c# - ElasticSearch对所有字段进行模糊搜索,增强精确匹配并增强其他各种匹配条件

c# - 如何从另一个程序集访问内部静态类?

c# - Visual Studio 2013 Rdlc - 如何显示导航属性中的值

asp.net - 我如何禁用asp.net按钮

mysql - 如何在sql中将重复值显示为NULL?

c# - 多次按 Tab 键后不再调用线程 Hook 程序。为什么?

c# - 关于 c# 接口(interface)和泛型的问题

c# - 显示数据的 GridView

c# - 更新记录在 LINQ to SQL 中不起作用

c# - 更高效的 Linq to SQL