2009-08-11 18 views

Respuesta

53

Sí, puede almacenar cualquier objeto (supongo que está utilizando ASP.NET con la configuración predeterminada, que está en proceso de estado de sesión):

Session["test"] = myList; 

ha entregado de nuevo al tipo original para utiliza:

var list = (List<int>)Session["test"]; 
// list.Add(something); 

Como señala Richard, se debe tener un cuidado especial si está utilizando otros modos de estado de sesión (por ejemplo, SQL Server) que requieren objetos para ser serializable.

+5

No es exactamente cierto. Si necesita utilizar un almacén de sesión diferente al predeterminado en proc, la clase deberá ser serializable. Es por eso que es mejor marcar cualquier clase que pongas en sesión como Serializable desde el principio, luego puedes cambiar el mecanismo sin tener que editar tu código. – RichardOD

+0

El punto válido es 1. 'List ' es serializable si 'T' es serializable. 2. El modo de estado de sesión predeterminado es in-proc. –

+0

@ Mehrdad- entiendo lo que querías decir y es bueno que tengas una muestra de código. Solo volvería a redactar el "cualquier objeto" en tu respuesta. – RichardOD

16

Sí. ¿Para qué plataforma estás escribiendo? ASP.NET C#?

List<string> myList = new List<string>(); 
Session["var"] = myList; 

Entonces, para recuperar:

myList = (List<string>)Session["var"]; 
4

encontré en un archivo de clase fuera del alcance de la página, la forma anterior (que siempre he utilizado) no funcionó.
encontré una solución en este "contexto" de la siguiente manera:

HttpContext.Current.Session.Add("currentUser", appUser); 

y

(AppUser) HttpContext.Current.Session["currentUser"] 

De lo contrario el compilador esperaba una cadena cuando me señaló el objeto en el objeto de sesión.

+0

Recibo tal error: System.Web.HttpException: no se puede serializar el estado de la sesión. En el modo 'StateServer' y 'SQLServer', ASP.NET serializará los objetos de estado de sesión y, como resultado, no se permiten objetos no serializables ni objetos MarshalByRef. La misma restricción se aplica si la serialización similar es realizada por el almacén de estado de sesión personalizado en modo 'Personalizado' –

1

probar este ..

List<Cat> cats = new List<Cat> 
    { 
     new Cat(){ Name = "Sylvester", Age=8 }, 
     new Cat(){ Name = "Whiskers", Age=2 }, 
     new Cat(){ Name = "Sasha", Age=14 } 
    }; 
    Session["data"] = cats; 
    foreach (Cat c in cats) 
     System.Diagnostics.Debug.WriteLine("Cats>>" + c.Name);  //DEBUGGG 
0
YourListType ListName = (List<YourListType>)Session["SessionName"]; 
Cuestiones relacionadas