C#中Cookie之存儲對象
本文通過代碼詳細(xì)給大家做講解,具體內(nèi)容如下:
做項目過程中,用戶登陸之后,需要將用戶的信息存到Cookie中,但因為Cookie中只能存儲字符串,所以想到了先把用戶實體序列化成Json串,存儲在Cookie中,用到的時候再拿出來反序列化。
道理很簡單,網(wǎng)上的例子也很多,但還是遇到一些小困難。下面與大家分享成果。(我的開發(fā)環(huán)境為VS2012,.net framework版本為4.0,)
C#中Json與對象之間的互相轉(zhuǎn)換
下載并引用Newtonsoft.Json.dll
定義一個簡單的用戶實體:
public class UserInfo
{
/// <summary>
/// 用戶名稱
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用戶密碼
/// </summary>
public string UserPwd { get; set; }
/// <summary>
/// 用戶級別
/// </summary>
public string UserLevel { get; set; }
}
將對象序列化成Json串:
/// <summary>
/// 將對象序列化成Json
/// </summary>
/// <param name="obj">需要序列化的對象</param>
/// <returns>序列化后的字符串</returns>
public static string ObjectToJson(object obj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
}
將Json串反序列化成對象:
/// <summary>
/// 從Json字符串反序列化為對象
/// </summary>
/// <param name="jsonString">Json字符串</param>
/// <param name="obj">要生成的對象類型</param>
/// <returns>反序列化后的對象</returns>
public static object JsonToObject(string jsonString)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(jsonString);
}
Cookie的使用
將實體序列化為Json并存入Cookie中:
//獲取UserInfo對象
UserInfo enUser=new UserInfo()
{
UserName="Danny",
UserPwd="123456",
UserLevel="admin"
}
//創(chuàng)建Cookie對象
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保存時間
userInfo.Expires = DateTime.Now.AddMinutes(20);
從Cookie中讀取出Json串并反序列化成實體
//取出Cookie對象
HttpCookie userInfoCookie = System.Web.HttpContext.Current.Request.Cookies.Get("userInfo");
//從Cookie對象中取出Json串
string strUserInfo = HttpUtility.UrlDecode(userInfoCookie.Value, Encoding.GetEncoding("UTF-8"));
//Json串反序列化為實體
UserInfoViewModel userInfo = JsonToObject(strUserInfo) as UserInfoViewModel;
說明:實體的屬性值有中文時,序列化的字符串存儲到Cookie中時會產(chǎn)生亂碼,為了防止產(chǎn)生亂碼,我們在存入Cookie之前先用UrlEncode()和UrlDecode()對Json串進行編碼與解碼。
而且,一般的瀏覽器支持的Cookie存儲的容量為4k(差也就差一兩個字節(jié)),足夠存儲一個經(jīng)過序列化的對象了。
本文到此為止,希望大家喜歡。
相關(guān)文章
C#實現(xiàn)通過程序自動抓取遠(yuǎn)程Web網(wǎng)頁信息的代碼
C#實現(xiàn)通過程序自動抓取遠(yuǎn)程Web網(wǎng)頁信息的代碼...2007-04-04
C#中使用FilleStream實現(xiàn)視頻文件的復(fù)制功能
這篇文章主要介紹了C#中使用FilleStream實現(xiàn)視頻文件的復(fù)制功能,本文通過實例代碼給大家介紹的非常想詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

