20C#中Cookie之存储对象的扩展方法

自己写一个往Cookie里读写对象的扩展方法

创建一个静态类CookieExtands,用来存扩展方法

该类要用到序列化,要引用命名空间:using System.Web.Script.Serialization;

public static class CookieExtands
    {
        //public static void SaveObj<T>(this HttpCookie cookie, T t) { }
        //本来函数有两个参数,但是cookie本身调用的时候就通过this赋值给HttpCookie了
        //只需要传一个泛型即可
        /// <summary>
        /// Cookie中存储对象的扩展方法
        /// </summary>
        /// <param name="cookie">cookie本身</param>
        /// <param name="obj">任意类型的对象</param>
        public static void SaveObj(this HttpCookie cookie, Object obj)
        {
            //实例化序列化的类
            JavaScriptSerializer jss = new JavaScriptSerializer();
            //讲对象序列化为json字符串存在cookie里
            cookie.Value = jss.Serialize(obj);
        }
        /// <summary>
        /// 从cookie中取对象的方法
        /// </summary>
        /// <typeparam name="T">需要被转换成什么类型</typeparam>
        /// <param name="cookie">cookie本身,通过cookie来调用,这个参数不用传</param>
        /// <returns>返回一个任意类型</returns>
        public static T GetObj<T>(this HttpCookie cookie)
        {
            //从cookie里取出json字符串
            string jsonstr = cookie.Value;
            //实例化序列化的类
            JavaScriptSerializer jss = new JavaScriptSerializer();
            //反序列化为任意类型
            T t = jss.Deserialize<T>(jsonstr);
            //返回任意类型
            return t;
        }
    }

在外面直接将对象调用自己的方法即可写入到cookie里就行了

//实例化对象
            UserInfo userInfo = new UserInfo() {UserName = "张三",age = 15 };
            //调用扩展的方法将对象存在cookie里
            cookie.SaveObj(userInfo);

读取则调用另一个扩展方法

//获取cookie
            HttpCookie cookie = Request.Cookies["userinfo"];
            //调用取cookie得方法取对象
            UserInfo userInfo2 = cookie.GetObj<UserInfo>();
posted @ 2022-01-10 17:34  青仙  阅读(107)  评论(0编辑  收藏  举报