我们知道,在.NET中页面之间传值的方式有很多种,比如SESSION,COOKIES,Response.Redirect,URL等等;
具体用哪种方式要具体问题具体分析了,比如说就一个字段需要传到下一个页面,那么URL和Response.Redirect方式是不二选择;
如果对象较大的话,我们会考虑使用session,cookies,使用Session的话,在数据量大的时候有可能会造成IIS崩溃,导致站点无法访问,
那我们就使用COOKIES,有的朋友又会说,cookies容易丢失,确实是的,不过如果cookies用得好的话也不会丢失哦。
    接下来我介绍将类对象序列化之后保存在COOKIES里。
    在使用序列化之前,首先想一下,为什么要先将对象序列化然后写入COOKIES呢?不进行序列化就不行吗?序列化以后对象变成什么样子呢?
带着这几个问题我们来看看源代码:
首先创建类:其中[Serializable]标示该类可以被序列化

[Serializable]
    public class mbmembers
    {
        public mbmembers()
        {

}

#region "Private Variables"    
        private string _M_UserName;  // 帐号
        private string _M_RealName;  // 真实姓名
        private string _M_IDCard;  // 证件号码
        private string _M_Email;  // 电子邮件信箱
        private string _M_Mobile;  // 手机号码
        #endregion

#region "Public Variables"
        /// <summary>
        /// 帐号
        /// </summary>
        public string M_UserName
        {
            set { this._M_UserName = value; }
            get { return this._M_UserName; }
        }

/// <summary>
        /// 真实姓名
        /// </summary>
        public string M_RealName
        {
            set { this._M_RealName = value; }
            get { return this._M_RealName; }
        }

/// <summary>
        /// 证件号码
        /// </summary>
        public string M_IDCard
        {
            set { this._M_IDCard = value; }
            get { return this._M_IDCard; }
        }

/// <summary>
        /// 电子邮件信箱
        /// </summary>
        public string M_Email
        {
            set { this._M_Email = value; }
            get { return this._M_Email; }
        }

/// <summary>
        /// 手机号码
        /// </summary>
        public string M_Mobile
        {
            set { this._M_Mobile = value; }
            get { return this._M_Mobile; }
        } 
      #endregion
    }
接下来提供序列化和反序列化的方法:

/// <summary>
       /// 对类mbmembers进行二进制序列化成一个字符串
       /// </summary>
       /// <returns>序列化代码</returns>
       public  string  BinarySerialize(mbmembers model)
       {
           BinaryFormatter ser = new BinaryFormatter();
           MemoryStream mStream = new MemoryStream();
           ser.Serialize(mStream, model);
           byte[] buf = mStream.ToArray();
           mStream.Close();

return System.Text.Encoding.Default.GetString(buf);
       }
       /// <summary>
       /// 将从Cookie中取出的字符串反序列化成一个mbmembers类
       /// </summary>
       /// <param name="binary"></param>
       /// <returns></returns>
       public  mbmembers DeSerialize(string strLoginUserModel)
       {
           byte[] binary = System.Text.Encoding.Default.GetBytes(strLoginUserModel);
          
           BinaryFormatter ser = new BinaryFormatter();
           MemoryStream mStream = new MemoryStream(binary);
           mbmembers o = (mbmembers)ser.Deserialize(mStream);
           mStream.Close();
           return o;
       }

将用户个人信息序列化之后 写入COOKIES:
            mbmembers bs = new mbmembers();
            
            Response.Cookies["userinfo"].Value = BinarySerialize(bs); //序列化
            Response.Cookies["userinfo"].Expires = DateTime.MinValue;

string str= Request.Cookies["userinfo"].Value; //反序列化
            mbmembers mb = DeSerialize(str);

以上是所有源代码,可能比较难看懂,首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public   Product   findProduct(int   product_id);  
  注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。

不过此处,如果您不想序列化,而是直接将对象保存在COOKIES里面也是可以的,这就需要循环遍历对象里面的信息,将里面的信息拼接成字符串,然后存储在COOKIES中。

转载于:https://www.cnblogs.com/woalang/archive/2009/08/19/woalang.html

类序列化之后保存在COOKIES里相关推荐

  1. SpringDataJpa的使用 – 实体类序列化

    SpringDataJpa的使用 – 实体类序列化 前面提到了 JAP 的几个常用注解 @OneToOne.@OneToMany.@ManyToOne.@ManyToMany 的使用,但没有说 序列化 ...

  2. 模型类序列化器ModelSerializer

    如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...

  3. 如何将类序列化并直接存储入数据库

    本文将从这两个格式器入手,先向大家介绍分别用它们如何实现序列化和反序列化,然后比较两种格式器的不同点.接着我会向大家介绍实现序列化对对象类型的一些要求,同时还要向大家介绍两种不同的序列化方式:基本序列 ...

  4. 魔术方法 类 序列化_Java序列化魔术方法及其示例使用

    魔术方法 类 序列化 在上一篇文章中, 您需要了解有关Java序列化的所有知识 ,我们讨论了如何通过实现Java序列化来启用类的可序列化性. Serializable接口. 如果我们的类未实现Seri ...

  5. c#.net实体类序列化方法  为什么要序列化

    提到为了传递数据,需要把作为载体的实体类序列化,好好的找了一些序列化方面的介绍.感觉下面的这个介绍比较容易介绍! 1.什么是序列化 序列化是将对象状态转换为可保持或传输的格式的过程,在序列化过程中,对 ...

  6. C# 实体类序列化与反序列化一 (XmlSerializer)

    /// <summary>/// 实体类序列化的反序列化的类/// </summary>/// <typeparam name="T">< ...

  7. 四、模型类序列化器ModelSerializer

    如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...

  8. java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化

    - Transient关键字 Java的serialization提供了一种持久化对象实例的机制.当持久化对象时,可能有一个特殊的对象数据成员,我们不想  用serialization机制来保存它.为 ...

  9. json 反序列化 父子类型_json类序列化与反序列化参考

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Runtime.Ser ...

  10. fileinputstream自定义类序列化和反序列化_Rest Assured篇:Java中的序列化和反序列化...

    点击上方蓝字设为星标 每天傍晚伴你一起成长! Java 中的序列化和反序列化是一个重要的编程概念.它适用于所有主要的编程语言.在本章中,我们将尝试在Java语言的上下文中理解此概念.在本章的最后,我们 ...

最新文章

  1. [HAOI2018]染色
  2. 【网络流】Modular Production Line
  3. Android Http请求框架二:xUtils 框架网络请求
  4. 机器学习:AdaBoost算法及其实现
  5. STM32H743+CubeIDE-CanFestival实现两个CANopen Master同时独立运行
  6. Vue中全局导入和按需导入的区别
  7. 基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
  8. android 可拖拽控件,安卓实现任意控件view可拖拽,并监听拖拽和点击事件,可自动拉回屏幕边缘...
  9. 今日芯声 | 从“罪犯”到“英镑人物”,图灵比肩英国女王
  10. Halcon 排线检测|固定颜色检测
  11. 地理信息科学期末考试重要知识点总结
  12. 高薪资的优秀平面设计师是怎样的
  13. 数字电路实验怎么接线视频讲解_【高中物理】电学实验满分知识点总结及例题精讲...
  14. 焦绪录:大数据如何推动数字中国建设
  15. 没有找到libgcc_s_sjlj-1.dll
  16. 2009年的人民币1000元购买力,相当于30年前人民币多少钱?
  17. VF200(VF101-N)产品重庆平台操作指导书_v2.1.24_20201020
  18. 你知道APP扫码登陆的实现原理吗?
  19. 电商婴儿商品销售数据分析
  20. 微信公众号开发和小程序开发

热门文章

  1. python实现arxiv论文数据解析处理
  2. no override found for vtkpolydatamapper解决方法
  3. idhttp返回乱码_node.js http.get请求返回的中文乱码, iconv zlib模块都不好使,求解决!!!...
  4. c++歌手类代码_安卓资源ID修改-游戏发行-切包过程中的R类和Public.xml
  5. java并发编程(1)--线程 可见性 volatile怎么用
  6. String.valueOf()方法的使用总结
  7. java alert 乱码_在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法...
  8. C++中Lambda函数(匿名函数)
  9. Leetcode之两棵二叉搜索树中的所有元素
  10. oracle把一列更新为空,ORA-01439:要更改数据类型,则要修改的列必须为空