与存储在 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 中所有当前临时表的列表?