セッションオブジェクトのシリアル化に問題があります。私は間違っているの? XmlSerializerとBinaryFormatterでそのオブジェクトをシリアル化しようとしましたが問題はありませんでした。セッション状態のシリアル化
私はエラーを取得しますセッションにバスケットのオブジェクトを保存してみてください:ここ
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.
がオブジェクトである:セッションで操作する
[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}
コード:
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
}
私はInProcセッション状態を使用する場合、それは動作します。したがって、シリアル化プロセスでなければなりません
「バイナリ検索」方法論を使用してこれを発見しましたか?もしあなたがそれを試していたら、あなたはこのような問題を発見したでしょう。 –
メソッドの試行ミスを使用しました。 :-) セッションのシリアライズはイベントを好きではありません。 –