我正在开发一个 aspx 应用程序 (C#),我在其中使用HttpSessionState
在视图更改之间的代码中保存不同的对象。其中一些对象包含通用列表 ( List<T>
),但当我使用 SQL 数据库存储状态 ( ) 时,这些列表似乎没有保存sessionState mode = "SQLServer"
。对象中的所有其他属性都被保存,但是当我尝试检索列表时,我得到了空列表。
有趣的是,如果我使用sessionState mode = "InProc"
.
我的课程有这个Serializable
属性。我正在运行 C#/.NET 4.0。
任何想法,将不胜感激!
编辑:
只是用一些代码来澄清(不是逐字逐句!)。
我有我想保存(实例)到我的会话状态的类:
public class MyClass
{
public string Property1 { get; set; }
public string Property2 { get; set; }
public List<MyOtherClass> Property3 { get; set; }
}
public class MyOtherClass
{
public string AnotherProperty1 { get; set; }
public string AnotherProperty2 { get; set; }
}
然后,在我的代码后面 - 一个操作保存以前类的对象:
public void MyMethod()
{
MyClass myClass = new MyClass()
{
Property1 = "One string",
Property2 = "One other string",
Property3 = new List<MyOtherClass>() { new MyOtherClass() { AnotherProperty1 = "One", AnotherProperty2 = "Ohter" } }
};
HttpContext.Current.Session["MyKey"] = myClass;
}
...另一个动作将检索该对象:
public void MyOtherMethod()
{
MyClass myClass = (MyClass)HttpContext.Current.Session["MyKey"];
int c = myClass.Property3.Count; // Will be 0!!
}
所以myClass.Property1
andmyClass.Property2
将保存我之前设置的字符串,但是myClass.Property3
是一个空列表。