利用对象序列化将购物车保存在Cookie中

来源:互联网 发布:怎样让电脑用手机网络 编辑:程序博客网 时间:2024/05/22 17:32

购物车类:ShopCart.cs(说明:主要利用hashtable保存商品对象)

using System;
using System.Collections;

/// <summary>
/// 购物车类
/// </summary>
[Serializable]
public class ShopCart
{
     public Hashtable _CartItems = new Hashtable();

     /// <summary>
     /// 构造函数
     /// </summary>
     public ShopCart()
     {
         ///to do something
     }


     /// <summary>
     /// 返回购物车中的所有商品(接口类型)
     /// </summary>
     public ICollection CartItems
     {
         get { return _CartItems.Values; }
     }

     /// <summary>
     /// 购物中所有商品的价格合计
     /// </summary>
     public double Total
     {
         get
         {
             double sum = 0;
             foreach (ShopCartItem item in _CartItems.Values)
             {
                 sum += ((item.Price * item.Quantity) + item.SendPrice);
             }
             return sum;
         }
     }

     /// <summary>
     /// 返回购物车里所有商品的数量
     /// </summary>
     public double TotalNum
     {
         get
         {
             double sum = 0;
             foreach (ShopCartItem item in _CartItems.Values)
             {
                 sum += item.Quantity;
             }
             return sum;
         }
     }

     /// <summary>
     /// 向购物车里添加某商品
     /// </summary>
     /// <param name="ID">商品ID</param>
     /// <param name="Name">商品名称</param>
     /// <param name="Price">商品单价</param>
     /// <param name="AutoAddQuantity">如果购物车中已经存在该商品,该商品的数量是否加一,True数量加1,False数量不变</param>
     public void AddItem(string ID, string Name, string DeliveryName, double Price, int Score, string ProductId, string PicUrl, double MarketPrice, double UserPrice, double VipPrice, double SendPrice,string ShopID, string UrlFrom, bool AutoAddQuantity)
     {
         ShopCartItem item = (ShopCartItem)_CartItems[ID];
         if(item == null)
             _CartItems.Add(ID, new ShopCartItem(ID, Name, DeliveryName, Price, Score, ProductId, PicUrl, MarketPrice, UserPrice, VipPrice, SendPrice,ShopID, UrlFrom));
         else
         {
             if(AutoAddQuantity)
             {
                 item.Quantity++;
             }
             _CartItems[ID] = item;
         }
     }

     /// <summary>
     /// 从购物车里移除某商品
     /// </summary>
     /// <param name="ID">商品ID</param>
     /// <param name="FullDelete">如果商品数量大于1,是否彻底从购物车中删除该种商品,true彻底从购物车中删除该种商品,false则仅将该种商品数量减一</param>
     public void RemoveItem(string ID, bool FullDelete)
     {
         ShopCartItem item = (ShopCartItem)_CartItems[ID];
         if(item == null)
         {
             return;
         }
         else
         {
             if(FullDelete)
             {
                 _CartItems.Remove(ID);
             }
             else
             {
                 item.Quantity--;
                 if(item.Quantity == 0)
                 {
                     _CartItems.Remove(ID);
                 }
                 else
                 {
                     _CartItems[ID] = item;
                 }
             }
         }
     }

     /// <summary>
     /// 修改购物车里某商品的数量
     /// </summary>
     /// <param name="ID">商品ID</param>
     /// <param name="Quantity">商品数量</param>
     public void UpdateItem(string ID, int Quantity)
     {
         ShopCartItem item = (ShopCartItem)_CartItems[ID];
         if(item == null)
         {
             return;
         }
         else
         {
             if(Quantity > 0) //商品数量必须大于0
             {
                 item.Quantity = Quantity;
             }
             _CartItems[ID] = item;
         }
     }


     /// <summary>
     /// 清空购物车
     /// </summary>
     public void ClearCart()
     {
         _CartItems.Clear();
     }

}

/// <summary>
/// [购物车具体]商品类
/// </summary>
[Serializable]
public class ShopCartItem
{
     private string _ID;//产品GUID
     private string _Name;//产品名称
     private string _DeliveryName;//物流产品名
     private double _Price=0;//产品单价(结算价格)
     private int _Score = 0;//产品单个积分
     private int _Quantity = 1;//产品数量
     private string _ProductId;//产品自定义编号
     private string _PicUrl;//图片地址
     private double _MarketPrice=0;//市场价格
     private double _VipPrice=0;//VIp价格
     private double _UserPrice=0;//会员价格
     private double _SendPrice=0;//运输费用
     private string _ShopID;//商家ID
     private string _UrlFrom; //页面来源


     /// <summary>
     /// 属性:商品ID
     /// </summary>
     public string ID
     {
         get { return _ID; }
     }

     /// <summary>
     /// 属性:商品名称Name
     /// </summary>
     public string Name
     {
         get { return _Name; }
     }

     /// <summary>
     /// 属性:商品单价Price
     /// </summary>
     public double Price
     {
         get { return _Price; }
     }

     /// <summary>
     /// 单件产品所获积分
     /// </summary>
     public int Score
     {
         get
         {
             return _Score;
         }
         set
         {
             _Score = value;
         }
     }

     /// <summary>
     /// 产品编号
     /// </summary>
     public string ProductId
     {
         get
         {
             return _ProductId;
         }
         set
         {
             _ProductId = value;
         }
     }

     /// <summary>
     /// 产品图片地址
     /// </summary>
     public string PicUrl
     {
         get
         {
             return _PicUrl;
         }
         set
         {
             _PicUrl = value;
         }
     }

     /// <summary>
     /// 市场价格
     /// </summary>
     public double MarketPrice
     {
         get
         {
             return _MarketPrice;
         }

         set
         {
             _MarketPrice = value;
         }
     }

     /// <summary>
     /// VIP价格
     /// </summary>
     public double VipPrice
     {
         get
         {
             return _VipPrice;
         }

         set
         {
             _VipPrice = value;
         }
     }

     /// <summary>
     /// 会员价格
     /// </summary>
     public double UserPrice
     {
         get
         {
             return _UserPrice;
         }

         set
         {
             _UserPrice = value;
         }
     }

     /// <summary>
     /// 运输费用
     /// </summary>
     public double SendPrice
     {
         get
         {
             return _SendPrice;
         }
         set
         {
             _SendPrice = value;
         }
     }


     /// <summary>
     /// 属性:商品数量Quantity
     /// </summary>
     public int Quantity
     {
         get { return _Quantity; }
         set { _Quantity = value; }
     }

     /// <summary>
     /// 商家ID
     /// </summary>
     public string ShopID {
         get { return _ShopID; }
         set { _ShopID = value; }
     }

     /// <summary>
     /// 页面来源
     /// </summary>
     public string UrlFrom
     {
         get { return _UrlFrom; }
         set { _UrlFrom = value; }
     }

     /// <summary>
     /// 购物车商品项完整构架函数
     /// </summary>
     /// <param name="ID">产品ID</param>
     /// <param name="Name">产品名称</param>
     /// <param name="DeliveryName">产品物流名称</param>
     /// <param name="Price">产品单价(计算价)</param>
     /// <param name="Score">产品积分</param>
     /// <param name="ProductId">产品编号</param>
     /// <param name="PicUrl">产品图片</param>
     /// <param name="MarketPrice">会员价格</param>
     /// <param name="UserPrice">市场价格</param>
     /// <param name="VipPrice">VIp价格</param>
     /// <param name="SendPrice">运输费用</param>
     /// <param name="ShopID">商家ID</param>
     /// <param name="UrlFrom">页面来源</param>
     public ShopCartItem(string ID, string Name, string DeliveryName, double Price, int Score, string ProductId, string PicUrl, double MarketPrice, double UserPrice, double VipPrice, double SendPrice, string ShopID, string UrlFrom)
     {
         _ID = ID;
         _Name = Name;
         _DeliveryName = DeliveryName;
         _Quantity = 1;
         _Price = Price;
         _Score = Score;
         _ProductId = ProductId;
         _PicUrl = PicUrl;
         _MarketPrice = MarketPrice;
         _UserPrice = UserPrice;
         _VipPrice = VipPrice;
         _SendPrice = SendPrice;
         _ShopID = ShopID;
         _UrlFrom = UrlFrom;
     }


     /// <summary>
     /// 购物车商品项简单构架函数
     /// </summary>
     /// <param name="ID">产品ID</param>
     /// <param name="Name">产品名称</param>  
     /// <param name="Price">产品单价(计算价)</param>
     public ShopCartItem(string ID, string Name, double Price)
     {
         _ID = ID;
         _Name = Name;
         _DeliveryName = "";
         _Quantity = 1;
         _Price = Price;
         _Score = 0;
         _ProductId = "";
         _PicUrl = "";
         _MarketPrice = 0;
         _UserPrice = 0;
         _VipPrice = 0;
         _SendPrice = 0;
         _ShopID = "";
         _UrlFrom = "";
     }

     /// <summary>
     /// 购物车商品项构架函数
     /// </summary>
     /// <param name="ID">产品ID</param>
     /// <param name="Name">产品名称</param>  
     /// <param name="Price">产品单价(计算价)</param>
     /// <param name="UrlFrom">页面来源</param>
     public ShopCartItem(string ID, string Name, double Price,string UrlFrom)
     {
         _ID = ID;
         _Name = Name;
         _DeliveryName = "";
         _Quantity = 1;
         _Price = Price;
         _Score = 0;
         _ProductId = "";
         _PicUrl = "";
         _MarketPrice = 0;
         _UserPrice = 0;
         _VipPrice = 0;
         _SendPrice = 0;
         _ShopID = "";
         _UrlFrom = UrlFrom;
     }


     /// <summary>
     /// 购物车商品项标准构架函数
     /// </summary>
     /// <param name="ID">产品ID</param>
     /// <param name="Name">产品名称</param>  
     /// <param name="Price">产品单价(计算价)</param>
     /// <param name="UrlFrom">页面来源</param>
     /// <param name="UrlFrom">页面来源</param>
     public ShopCartItem(string ID, string Name, double Price,string ShopID, string UrlFrom)
     {
         _ID = ID;
         _Name = Name;
         _DeliveryName = "";
         _Quantity = 1;
         _Price = Price;
         _Score = 0;
         _ProductId = "";
         _PicUrl = "";
         _MarketPrice = 0;
         _UserPrice = 0;
         _VipPrice = 0;
         _SendPrice = 0;
         _ShopID = ShopID;
         _UrlFrom = UrlFrom;
     }
}


测试页面:Demo.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Demo.aspx.cs" Inherits="Public_Test_Demo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
     <title>无标题页</title>
</head>
<body>
     <form id="form1" runat="server">
     <div>
         <asp:Label ID="lblResult" runat="server" Text="Label"></asp:Label><br />
         <br />
         <asp:Button ID="btnReadCookie" runat="server" Text="读取Cookie中的ShopCart" OnClick="btnReadCookie_Click" />&nbsp;</div>
     </form>
</body>
</html>

后置代码Demo.aspx.cs文件:

using System;
using System.Collections;
using System.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text;
using CNTVS.TOOLS;

public partial class Public_Test_Demo : System.Web.UI.Page
{
     string CookieName = "ShopCart";

     protected void Page_Load(object sender, EventArgs e)
     {
       

         if (!IsPostBack)
         {
             ShopCart SC = new ShopCart();
             SC.AddItem("1", "ProductName", "ProductName", 0, 0, "ProductID", "", 0, 0, 0, 0, "ShopId", "TestUrl", true);
             SC.AddItem("2", "ProductName123", "ProductName123", 0, 0, "ProductID123", "", 0, 0, 0, 0, "ShopId111", "TestUrl23", true);

             //将ShopCart对象写入Cookie
             IFormatter fm = new BinaryFormatter();          
             Stream sm = new MemoryStream();
             fm.Serialize(sm, SC);
             sm.Seek(0, SeekOrigin.Begin);
             StreamReader reader = new StreamReader(sm);
             string strCart = reader.ReadToEnd();
             reader.Close();           
             HttpCookie hc = new HttpCookie(CookieName);
             hc.Value = Server.UrlEncode(strCart);
             hc.Expires = DateTime.Now.AddDays(1);
             Response.Cookies.Add(hc);
         }      
     }


     ///// <summary>
     ///// 将ShopCart写入Cookie
     ///// </summary>
     ///// <param name="SC">ShopCart对象</param>
     ///// <param name="CookieName">CookieName,默认为ShopCart</param>
     //public static string ShopCartToCookie(ShopCart SC, string CookieName)
     //{
     //     if (Utils.CheckNull(CookieName)) { CookieName = "ShopCart"; }
     //     if (Utils.CheckNull(SC))
     //     {
     //         Utils.WriteCookie(CookieName, "");
     //         return "";
     //     }
     //     else
     //     {
     //         IFormatter fm = new BinaryFormatter();
     //         Stream sm = new MemoryStream();           
     //         fm.Serialize(sm, SC);
     //         sm.Seek(0, SeekOrigin.Begin);
     //         StreamReader reader = new StreamReader(sm);
     //         string strCart = reader.ReadToEnd();
     //         reader.Close();
     //         Utils.WriteCookie(CookieName, strCart);
     //         return strCart;
     //     }
     //}


     ///// <summary>
     ///// 将Cookie反序列化为ShopCart
     ///// </summary>
     ///// <param name="CookieName">CookieName,默认为ShopCart</param>
     //public static ShopCart CookieToShopCart(string CookieName)
     //{
     //     if (Utils.CheckNull(CookieName)) { CookieName = "ShopCart"; }
     //     string StrCart = Utils.GetCookie(CookieName);
     //     if (Utils.CheckNull(StrCart))
     //     {
     //         return null;
     //     }

     //     byte[] bt = System.Text.Encoding.Default.GetBytes(StrCart);
     //     Stream sm = new MemoryStream(bt);
     //     IFormatter fm = new BinaryFormatter();
     //     ShopCart SC = (ShopCart)fm.Deserialize(sm);
     //     if (Utils.CheckNull(SC))
     //     {
     //         return null;
     //     }
     //     else
     //     {
     //         return SC;
     //     }
     //}


     protected void btnReadCookie_Click(object sender, EventArgs e)
     {       
         string StrCartNew = Server.UrlDecode(Request.Cookies[CookieName].Value.ToString());
         byte[] bt = System.Text.Encoding.Default.GetBytes(StrCartNew);
         Stream smNew = new MemoryStream(bt);
         IFormatter fmNew = new BinaryFormatter();
         ShopCart SCNew = (ShopCart)fmNew.Deserialize(smNew);
         foreach(ShopCartItem SCI in SCNew.CartItems)
         {
             lblResult.Text += "<br/>产品名称:" + SCI.Name;
         }
     }
}

 

原创粉丝点击