很多人都在使用.net form认证,但我们使用System.Web.Security.FormsAuthentication.SetAuthCookie(string userName, bool createPersistentCookie)时,发现很多时候我们需要保存一些object对象到cookie里边;这时候就需要修改方法来达到我们的需求。

.net3.5 及以后版本提供把对象转化为JSON的方法。

        /// <summary>

        /// 序列化操作

        /// </summary>

        /// <typeparam name="T">泛型</typeparam>

        /// <param name="obj">序列化对象</param>

        /// <returns></returns>

        public static string Serialize<T>(T obj)

        {

            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());

            MemoryStream ms = new MemoryStream();

            serializer.WriteObject(ms, obj);

            string retVal = Encoding.UTF8.GetString(ms.ToArray());

            ms.Dispose();

            return retVal;

        }

      /// <summary>

        /// 反序列化操作

        /// </summary>

        /// <typeparam name="T">泛型</typeparam>

        /// <param name="json">字符传</param>

        /// <returns></returns>

        public static T Deserialize<T>(string json)

        {

            T obj = Activator.CreateInstance<T>();

            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));

            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());

            obj = (T)serializer.ReadObject(ms);

            ms.Close();

            ms.Dispose();

            return obj;

        }

我们使用上边2个方法可以轻松实现Cookie保存任意类型的数据。

写入数据: System.Web.Security.FormsAuthentication.SetAuthCookie(Comon.Serialize<Hashtable

>(myHashtable)

false);

读取数据: Comon.Deserialize<Hashtable>(User.Identity.Name.ToString())

posted on 2011-07-15 17:23  都市浪子  阅读(408)  评论(1编辑  收藏  举报