zoukankan      html  css  js  c++  java
  • 将Model(类)写入cookie,序列化与反序列化操作

    转自:http://blog.csdn.net/xjzdr/archive/2009/04/24/4105814.aspx

    在登录时要保存的用户信息的类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace FGTWeb.Model
    {
        /// <summary>
        /// 在登录时需要保存到Cookie中的信息,属性不够时,以自行添加
        /// </summary>
       [Serializable]
       public class M_Login
        {
            private string _用户id;
            private string _工号;
            private string _姓名;
            private string _用户名;
            private string _密码;
            private int _当前机构id;
            private int _工种id;
            private string _工种名称;
            private string _机构名称;
            private int _父机构ID;
            private string _父机构名称;
            private string _用户登录IP;
            private string _角色id;
            private string _角色名称;
           
            private string _权限;

            private int _主岗位id;
            private string _附岗位id;

            private string _主岗位名称;

            private string _电子邮件;

            /// <summary>
            ///
            /// </summary>
            public string 用户ID
            {
                set { _用户id = value; }
                get { return _用户id; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 工号
            {
                set { _工号 = value; }
                get { return _工号; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 姓名
            {
                set { _姓名 = value; }
                get { return _姓名; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 用户名
            {
                set { _用户名 = value; }
                get { return _用户名; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 密码
            {
                set { _密码 = value; }
                get { return _密码; }
            }
            /// <summary>
            ///
            /// </summary>
            public int 当前机构ID
            {
                set { _当前机构id = value; }
                get { return _当前机构id; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 电子邮件
            {
                set { _电子邮件 = value; }
                get { return _电子邮件; }
            }
            /// <summary>
            ///
            /// </summary>
            public int 工种ID
            {
                set { _工种id = value; }
                get { return _工种id; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 工种名称
            {
                set { _工种名称 = value; }
                get { return _工种名称; }
            }
            /// <summary>
            ///
            /// </summary>
            public string 机构名称
            {
                set { _机构名称 = value; }
                get { return _机构名称; }
            }
            public int 父机构ID
            {
                set { _父机构ID = value; }
                get { return _父机构ID; }
            }

            public string 父机构名称
            {
                set { _父机构名称 = value; }
                get { return _父机构名称; }
            }
           /// <summary>
           ///
           /// </summary>
            public string 用户登录IP
            {
                set { _用户登录IP = value; }
                get { return _用户登录IP; }
            }
            /// <summary>
            /// 一个用户可能属于多个角色,是角色ID的列表
            /// </summary>
            public string 角色id
            {
                set { _角色id = value; }
                get { return _角色id; }
            }
           /// <summary>
            /// 一个用户可能属于多个角色,是角色名称的列表
           /// </summary>
            public string 角色名称
            {
                set { _角色名称 = value; }
                get { return _角色名称; }
            }
            public string 权限
            {
                set { _权限 = value; }
                get { return _权限; }
            }
           
            public int 主岗位id
            {
                set { _主岗位id = value; }
                get { return _主岗位id; }
            }

            public string 主岗位名称
            {
                set { _主岗位名称 = value; }
                get { return _主岗位名称; }
            }
           /// <summary>
           /// 可能有多个岗位,是多个ID的串,中间用,分开
           /// </summary>
            public string 附岗位id
            {
                set { _附岗位id = value; }
                get { return _附岗位id; }
            }
           
        }
    }

    注意类前面的   [Serializable],表示该类可序列化。

    将类序列化和批序列化的方法:

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

               return ByteToStr(buf);
           }
           /// <summary>
           /// 将从Cookie中取出的字符串反序列化成一个FGTWeb.Model.M_Login类
           /// </summary>
           /// <param name="binary"></param>
           /// <returns></returns>
           public static FGTWeb.Model.M_Login DeSerialize(string strLoginUserModel)
           {
               byte[] binary = strToByte(strLoginUserModel);
               BinaryFormatter ser = new BinaryFormatter();
               MemoryStream mStream = new MemoryStream(binary);
               FGTWeb.Model.M_Login o = (FGTWeb.Model.M_Login)ser.Deserialize(mStream);
               mStream.Close();
               return o;
           }

    登录页面的代码:

    if (model_LoginUser != null)//用户身份验证成功
                {
                 string strLoginUserMode = FGTWeb.BLL.BLL_Login.BinarySerialize(model_LoginUser);

                    HttpCookie a = new HttpCookie("model_LoginUser");
                    a.Value = strLoginUserMode;
                   
                    Response.Cookies.Add(a);

    }

    在其它的页面获取用户登录的信息(将cookie中的类反序列化):

     string aa = Request.Cookies["model_LoginUser"].Value.ToString();

                FGTWeb.Model.M_Login model_LoginUser_Test = new FGTWeb.Model.M_Login();
                model_LoginUser_Test = FGTWeb.BLL.BLL_Login.DeSerialize(aa);
                string strtr = "姓名:" + model_LoginUser_Test.姓名 + "(" + model_LoginUser_Test.用户名+")" + "  角色:" + model_LoginUser_Test.角色名称 + "  机构:" + model_LoginUser_Test.机构名称 + "  上级:" + model_LoginUser_Test.父机构名称;
                this.Label1.Text = strtr;

    strtr中可以显示登录用户的信息了。

    下面的代码更方便,可以任何的对象序列化和反序列化,上面的类的序列化只是一种情况而已:

    //序列化

     public static string BinarySerialize(Object obj)
           {
               BinaryFormatter ser = new BinaryFormatter();
               MemoryStream mStream = new MemoryStream();
               ser.Serialize(mStream, obj);
               byte[] buf = mStream.ToArray();
               mStream.Close();

               return ByteToStr(buf);
           }

    //反序列化

     /// <summary>
           /// 反序列化对象
           /// </summary>
           /// <param name="strLoginUserModel"></param>
           /// <returns></returns>
           public static object DeSerialize2(string strLoginUserModel)
           {
               byte[] binary = strToByte(strLoginUserModel);
               BinaryFormatter ser = new BinaryFormatter();
               MemoryStream mStream = new MemoryStream(binary);
               object obj = new object();
               obj = (object)ser.Deserialize(mStream);
               mStream.Close();
               return obj;
           }

    调用方法:

    //序列化

     string strLoginUserMode = FGTWeb.BLL.BLL_Login.BinarySerialize(model_LoginUser);

                    HttpCookie a = new HttpCookie("model_LoginUser");
                    a.Value = strLoginUserMode;

                    Response.Cookies.Add(a);

                    //测试反序列化
                    string aa = Request.Cookies["model_LoginUser"].Value.ToString();

                    FGTWeb.Model.M_Login model_LoginUser_Test = new FGTWeb.Model.M_Login();
                    model_LoginUser_Test = (FGTWeb.Model.M_Login)FGTWeb.BLL.BLL_Login.DeSerialize2(aa);
                    string strtr = "登录用户名:" + model_LoginUser_Test.用户名 + ",登录角色:" + model_LoginUser_Test.角色名称 + ",所在机构:" + model_LoginUser_Test.机构名称 + ",上级机构:" + model_LoginUser_Test.父机构名称;

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xjzdr/archive/2009/04/24/4105814.aspx

  • 相关阅读:
    Format用法总汇
    packed record与record区别
    将实数取整函数
    取鼠标所在位置对应的窗口句柄
    Delphi中优秀的字符串分割函数
    Jscript中的FSO对象模式
    关于.NET开发中遇到的一个验证视图状态Mac失败的解决方法随笔
    如何延长电脑硬盘的使用寿命
    如何避免U盘中毒
    如何优化Windows XP系统来加快网速
  • 原文地址:https://www.cnblogs.com/wangpei/p/1522130.html
Copyright © 2011-2022 走看看