C#中Cookie之存儲(chǔ)對(duì)象
本文通過(guò)代碼詳細(xì)給大家做講解,具體內(nèi)容如下:
做項(xiàng)目過(guò)程中,用戶登陸之后,需要將用戶的信息存到Cookie中,但因?yàn)镃ookie中只能存儲(chǔ)字符串,所以想到了先把用戶實(shí)體序列化成Json串,存儲(chǔ)在Cookie中,用到的時(shí)候再拿出來(lái)反序列化。
道理很簡(jiǎn)單,網(wǎng)上的例子也很多,但還是遇到一些小困難。下面與大家分享成果。(我的開發(fā)環(huán)境為VS2012,.net framework版本為4.0,)
C#中Json與對(duì)象之間的互相轉(zhuǎn)換
下載并引用Newtonsoft.Json.dll
定義一個(gè)簡(jiǎn)單的用戶實(shí)體:
public class UserInfo { /// <summary> /// 用戶名稱 /// </summary> public string UserName { get; set; } /// <summary> /// 用戶密碼 /// </summary> public string UserPwd { get; set; } /// <summary> /// 用戶級(jí)別 /// </summary> public string UserLevel { get; set; } }
將對(duì)象序列化成Json串:
/// <summary> /// 將對(duì)象序列化成Json /// </summary> /// <param name="obj">需要序列化的對(duì)象</param> /// <returns>序列化后的字符串</returns> public static string ObjectToJson(object obj) { return Newtonsoft.Json.JsonConvert.SerializeObject(obj); }
將Json串反序列化成對(duì)象:
/// <summary> /// 從Json字符串反序列化為對(duì)象 /// </summary> /// <param name="jsonString">Json字符串</param> /// <param name="obj">要生成的對(duì)象類型</param> /// <returns>反序列化后的對(duì)象</returns> public static object JsonToObject(string jsonString) { return Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(jsonString); }
Cookie的使用
將實(shí)體序列化為Json并存入Cookie中:
//獲取UserInfo對(duì)象
UserInfo enUser=new UserInfo() { UserName="Danny", UserPwd="123456", UserLevel="admin" }
//創(chuàng)建Cookie對(duì)象
HttpCookie userInfo = new HttpCookie("userInfo");
//將序列化之后的Json串以UTF-8編碼,再存入Cookie
userInfo.Value = HttpUtility.UrlEncode(ObjectToJson(enUser), Encoding.GetEncoding("UTF-8"));
//將cookie寫入到客戶端
System.Web.HttpContext.Current.Response.SetCookie(userInfo);
//設(shè)置cookie保存時(shí)間
userInfo.Expires = DateTime.Now.AddMinutes(20);
從Cookie中讀取出Json串并反序列化成實(shí)體
//取出Cookie對(duì)象
HttpCookie userInfoCookie = System.Web.HttpContext.Current.Request.Cookies.Get("userInfo");
//從Cookie對(duì)象中取出Json串
string strUserInfo = HttpUtility.UrlDecode(userInfoCookie.Value, Encoding.GetEncoding("UTF-8"));
//Json串反序列化為實(shí)體
UserInfoViewModel userInfo = JsonToObject(strUserInfo) as UserInfoViewModel;
說(shuō)明:實(shí)體的屬性值有中文時(shí),序列化的字符串存儲(chǔ)到Cookie中時(shí)會(huì)產(chǎn)生亂碼,為了防止產(chǎn)生亂碼,我們?cè)诖嫒隒ookie之前先用UrlEncode()和UrlDecode()對(duì)Json串進(jìn)行編碼與解碼。
而且,一般的瀏覽器支持的Cookie存儲(chǔ)的容量為4k(差也就差一兩個(gè)字節(jié)),足夠存儲(chǔ)一個(gè)經(jīng)過(guò)序列化的對(duì)象了。
本文到此為止,希望大家喜歡。
- C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法
- 詳解C#中使用對(duì)象或集合的初始值設(shè)定項(xiàng)初始化的操作
- C#編程中使用ref和out關(guān)鍵字來(lái)傳遞數(shù)組對(duì)象的用法
- C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換實(shí)例分析
- C#實(shí)現(xiàn)獲取不同對(duì)象中名稱相同屬性的方法
- C#中使用反射遍歷一個(gè)對(duì)象屬性及值的小技巧
- C#查找對(duì)象在ArrayList中出現(xiàn)位置的方法
- C#檢查指定對(duì)象是否存在于ArrayList集合中的方法
- 淺談對(duì)c# 面向?qū)ο蟮睦斫?/a>
- C# 對(duì)象持久化詳解
相關(guān)文章
漢字轉(zhuǎn)拼音軟件制件示例(漢字轉(zhuǎn)字母)
這篇文章主要介紹了c#漢字轉(zhuǎn)拼音的方法,但不能判斷多音字,大家可以參考修改使用2014-01-01關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(三)
在前面例子中,由于MyClass類型的對(duì)象是顯示創(chuàng)建的,因此使用反射技術(shù)來(lái)調(diào)用MyClass上的方法沒有任何優(yōu)勢(shì)--以普通的方式調(diào)用對(duì)象上的方法會(huì)簡(jiǎn)單的多2013-07-07解決C# winForm自定義鼠標(biāo)樣式的兩種實(shí)現(xiàn)方法詳解
本篇文章是對(duì)在C#中winForm自定義鼠標(biāo)樣式的兩種實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#截取中英文混合指定長(zhǎng)度字符串實(shí)例
這篇文章主要介紹了C#截取中英文混合指定長(zhǎng)度字符串,大家參考使用2013-12-12C#實(shí)體對(duì)象序列化成Json并讓字段的首字母小寫的兩種解決方法
這篇文章主要介紹了C#實(shí)體對(duì)象序列化成Json并讓字段的首字母小寫的兩種方法,在這兩種方法中小編比較推薦使用第二種方法,需要的朋友可以參考下2018-06-06