我想将sessionState
保存到自定义sql数据库中,但它需要序列化数据并给我这个错误。
无法序列化会话状态。在'StateServer'和 'SQLServer'模式,ASP.NET将序列化会话状态对象, 因此,不可序列化的对象或MarshalByRef对象是 不允许。如果类似的序列化,则适用相同的限制 由“自定义”模式下的自定义会话状态存储完成。
这是我的班级:
[Serializable()]
public class Cart
{
private List<CartLine> lineCollection = new List<CartLine>();
public void AddItem(Product product, int quantity)
{
CartLine line = lineCollection
.Where(p => p.Product.ProductID == product.ProductID)
.FirstOrDefault();
if (line == null)
{
lineCollection.Add(new CartLine { Product = product, Quantity = quantity });
}
else
{
line.Quantity += quantity;
}
}
public void RemoveLine(Product product)
{
lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID);
}
public decimal ComputeTotalValue()
{
return lineCollection.Sum(e => e.Product.ProductPrice * e.Quantity);
}
public void Clear()
{
lineCollection.Clear();
}
public IEnumerable<CartLine> Lines
{
get { return lineCollection; }
}
[Serializable()]
public class CartLine
{
public Product Product { get; set; }
public int Quantity { get; set; }
}
}
以下是我通过接口IModelBinder获取和设置会话数据的方法。 [序列化()]
public class CartModelBinder : IModelBinder
{
private const string sessionKey = "Cart";
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Cart cart = null;
if (controllerContext.HttpContext.Session != null)
{
cart = (Cart)controllerContext.HttpContext.Session[sessionKey];
}
if (cart == null)
{
cart = new Cart();
if (controllerContext.HttpContext.Session != null)
controllerContext.HttpContext.Session[sessionKey] = cart;
}
return cart;
}
}
任何帮助将不胜感激,谢谢。