Hello, i have problem with serialization my session object. What i'm doing wrong? I tried serialize that object with XmlSerializer and BinaryFormatter and there was no problem.
When i try save the basket object to the session i'll get error:
Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
here is the object:
[Serializable]
public class Basket
{
 #region Fields (2)
 [NonSerialized]
 private CMS.CmsEntity db;
 private List<ShopOrderItem> ShopOrderItems;
 #endregion Fields
 #region Properties (2)
 public bool IsEmpty
 {
  get
  {
   return (this.Items.Count == 0);
  }
 }
 public List<ShopOrderItem> Items
 {
  get
  {
   if (this.ShopOrderItems == null)
   {
    this.ShopOrderItems = new List<ShopOrderItem>();
   }
   return this.ShopOrderItems;
  }
  set
  {
   this.ShopOrderItems = value;
  }
 }
 #endregion Properties
 #region Delegates and Events (1)
 // Events (1) 
 public event EventHandler CartItemsChanged;
 #endregion Delegates and Events
 #region Methods (9)
 public int CountItems()
 {
  return this.ShopOrderItems.Sum(s => s.Quantity);
 }
 public decimal CountTotalAmount()
 {
  ...
 }
 public decimal CountTotalAmountWithoutVAT()
 {
  ...
 }
 public CMS.ProductVariant GetProductVariantById(int id)
 {
  ...
 }
 #region AddProductToCart
 public void AddProductToCart(int productVariantId, int quantity)
 {
  AddProductToCart(GetProductVariantById(productVariantId), quantity);
 }
 public void AddProductToCart(ProductVariant productVariant, int quantity)
 {
  ...
 }
 #endregion
 #region RemoveProductFromCart
 public void RemoveProductFromCart(int productVariantId)
 {
  RemoveProductFromCart(GetProductVariantById(productVariantId));
 }
 public void RemoveProductFromCart(ProductVariant productVariant)
 {
  ..
 }
 #endregion
 #region UpdateProductQuantity
 public void UpdateProductQuantity(int variantId, int quantity, bool isRelative)
 {
  UpdateProductQuantity(GetProductVariantById(variantId), quantity, isRelative);
 }
 public void UpdateProductQuantity(ProductVariant productVariant, int quantity, bool isRelative)
 {
  ...
 }
 #endregion
 #endregion Methods}
Code that manipulates with session:
public static class CurrentSession
{            
#region public static Basket Basket
public static Basket Basket
    {
        get
        {
      Basket c = SessionHelper.GetSessionObject("UserCart") as Basket;
      if (c == null)
      {
       c = new Basket();
       SessionHelper.SetSessionObject("UserCart", c);  // If i comment this line, exception is not thrown
      }
      return c;
        }
        set
        {
      SessionHelper.SetSessionObject("UserCart", value);
        }
    }
    #endregion
}
if i use InProc Session State, it works. So it must be in serialization process