首页 > 编程 > C# > 正文

C#中Cookie之存储对象

2019-10-29 21:40:33
字体:
来源:转载
供稿:网友

这篇文章主要介绍了在项目中,需要将用户的信息存到Cookie中,但是cookie只能保存字符串,所以需要先序列号,然后在存储在cookie中,有需要的朋友可以借鉴下

本文通过代码详细给大家做讲解,具体内容如下:

做项目过程中,用户登陆之后,需要将用户的信息存到Cookie中,但因为Cookie中只能存储字符串,所以想到了先把用户实体序列化成Json串,存储在Cookie中,用到的时候再拿出来反序列化。

道理很简单,网上的例子也很多,但还是遇到一些小困难。下面与大家分享成果。(我的开发环境为VS2012,.net framework版本为4.0,)

C#中Json与对象之间的互相转换

下载并引用Newtonsoft.Json.dll

定义一个简单的用户实体:

 

 
  1. public class UserInfo 
  2. /// <summary> 
  3. /// 用户名称 
  4. /// </summary> 
  5. public string UserName { get; set; } 
  6. /// <summary> 
  7. /// 用户密码 
  8. /// </summary> 
  9. public string UserPwd { get; set; } 
  10. /// <summary> 
  11. /// 用户级别 
  12. /// </summary> 
  13. public string UserLevel { get; set; } 

将对象序列化成Json串:

 

 
  1. /// <summary> 
  2. /// 将对象序列化成Json 
  3. /// </summary> 
  4. /// <param name="obj">需要序列化的对象</param> 
  5. /// <returns>序列化后的字符串</returns> 
  6. public static string ObjectToJson(object obj) 
  7. return Newtonsoft.Json.JsonConvert.SerializeObject(obj); 

将Json串反序列化成对象:

 

 
  1. /// <summary> 
  2. /// 从Json字符串反序列化为对象 
  3. /// </summary> 
  4. /// <param name="jsonString">Json字符串</param> 
  5. /// <param name="obj">要生成的对象类型</param> 
  6. /// <returns>反序列化后的对象</returns> 
  7. public static object JsonToObject(string jsonString) 
  8. return Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(jsonString); 

Cookie的使用

将实体序列化为Json并存入Cookie中:

//获取UserInfo对象

 

 
  1. UserInfo enUser=new UserInfo() 
  2. UserName="Danny"
  3. UserPwd="123456"
  4. UserLevel="admin" 

//创建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);

//设置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中时会产生乱码,为了防止产生乱码,我们在存入Cookie之前先用UrlEncode()和UrlDecode()对Json串进行编码与解码。

而且,一般的浏览器支持的Cookie存储的容量为4k(差也就差一两个字节),足够存储一个经过序列化的对象了。

本文到此为止,希望大家喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表