在ASPX脚本块中声明一个类然后将其存储在会话中

我在做一些我认为应该非常可行的事情时遇到了麻烦。 也许有人可以告诉我我错过了什么。 我只能将我的C#代码添加到服务器端脚本块中的.aspx页面(后面没有代码)。 我想在ASPX页面上定义一个新类(同样不创建任何其他文件)(这将是一个嵌套类),然后在Session中存储这些对象的List以在回发之间和用户花费一些时间之后保留其他页面然后返回到有问题的页面。 这是我的代码……

 protected List AssignmentSearchResults { get { if (Session["SearchResults"] == null) Session["SearchResults"] = new List(); return (List)Session["SearchResults"]; } set { Session["SearchResults"] = value; } } public class Part { public string Id { get; set; } public string Description { get; set; } public string Type { get; set; } public bool Selected { get; set; } }  (html goes here) 

如果我使用List它工作得很好,但是当我使用我的自定义类时,它没有。 这是我得到的错误……

[A] System.Collections.Generic.List 1[ASP.pub_usercontrols_exeplanning_resources_ascx+Part] cannot be cast to [B]System.Collections.Generic.List 1 [ASP.pub_usercontrols_exeplanning_resources_ascx + Part]。 类型A源自位于’C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0’的上下文’LoadNeither’中的’mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089′ .0__b77a5c561934e089 \ mscorlib.dll中”。 类型B源自位于’C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0’上下文’LoadNeither’中的’mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089′ .0__b77a5c561934e089 \ mscorlib.dll中”。

……也许你会注意到两个(A和B)是完全相同的。 有任何想法吗? 非常感谢您提供任何帮助。

我不知道是什么原因引起了你的问题,但我有一个解决方案。 由于会话对象无论如何都是序列化的,为什么不首先序列化对象/对象列表然后将它放入Session []?

IE:

 List parts = new List(); //... populate parts XmlSerializer xs = new XmlSerializer(typeof(List)); MemoryStream ms = new MemoryStream(); xs.Serialize(ms, parts); // Rewind the stream and write it to session as XML ms.Seek(0, SeekOrigin.Begin); Session["XMLResults"] = Encoding.ASCII.GetString(ms.ToArray()); //Get memory stream from session ms = new MemoryStream(); byte[] bData = Encoding.ASCII.GetBytes(Session["XMLResults"].ToString()); ms.Write(bData, 0, bData.Length); // Hydrate parts list from a memory stream ms.Seek(0, SeekOrigin.Begin); parts = (List)xs.Deserialize(ms);