与存储在 SQL Server 中的会话的列表的可序列化问题

Posted

技术标签:

【中文标题】与存储在 SQL Server 中的会话的列表的可序列化问题【英文标题】:Serializable issue with List with Session stored in SQL Server 【发布时间】:2015-07-15 21:55:36 【问题描述】:

我们将 .Net 4.0 和 SQL Server 用于我们的会话存储。

我们已将所有对象标记为 [Serializable],但仍然出现错误:

System.Web.HttpException (0x80004005): Unable to serialize the session state.

问题出在我们已经实现的 ToList 方法的调用上

if (licenseHoldings != null && licenseHoldings.**ToList()**.Any())

以及 LicenseHoldings.cs 的实现:

[Serializable]
public class LicenseHoldings


    public MyEnum myEnum get; set; 

    public MySerializableObject mySerializableObject  get; set; 


    public List<MySerializableObjectBaseClass> ToList()
    
        var list = new List<MySerializableObjectBaseClass>();

        if (mySerializableObject != null)
            list.Add(mySerializableObject  );

...

        return list;
    

为什么可序列化对象的列表不能序列化到 SQL Server 会话?

【问题讨论】:

我认为我们需要更多地了解您的 LicenseHoldings 课程。例如至少类声明、所有字段和任何自动属性,以便我们了解 LicenseHoldings 中包含哪些数据。 您可以尝试一个快速的实验并将 ToList 方法简单地重命名为其他名称,例如“MyToList”吗? 值得一试 Rajeev,但它没有解决问题。列表是否应该可序列化到会话的任何想法? 据我所知,只要 List 中的对象本身是可序列化的,List 绝对应该对 Session 是可序列化的。但事情是这样的……你没有列表。查看 LicenseHoldings 类,我在任何地方都看不到任何列表。该类中的数据仅由 MyEnum 和 MySerializableObject 组成。清单在哪里?当然,您有一个返回 List 的 ToList() 方法,但这无关紧要。方法及其返回值不会被序列化。 感谢您的帮助 Rajeev,但我们已经确定了问题 - 请参阅下面的回答 【参考方案1】:

本例中的问题是对象 MySerializableObjectBaseClass 引用了一个 IEnumerable,即。一个不可序列化的接口。

我们用 List 替换了 IEnumerable,一切都很好..

【讨论】:

以上是关于与存储在 SQL Server 中的会话的列表的可序列化问题的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法获取 SQL Server 中所有当前临时表的列表?

SQL Server 2008 在具有空间索引的可空地理列上的性能

SQL Server 中的可延迟约束

如何从 SQL Server 中的存储过程中检索参数列表

如何让 SQL Server 表存储一个列表?

存储在会话数据中与存储在 Sql 数据库中以获取临时数据