C#中Cookie之存储对象
本文通过代码详细给大家做讲解,具体内容如下:
做项目过程中,用户登陆之后,需要将用户的信息存到cookie中,但因为cookie中只能存储字符串,所以想到了先把用户实体序列化成json串,存储在cookie中,用到的时候再拿出来反序列化。
道理很简单,网上的例子也很多,但还是遇到一些小困难。下面与大家分享成果。(我的开发环境为vs2012,.net framework版本为4.0,)
c#中json与对象之间的互相转换
下载并引用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" }
//创建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(差也就差一两个字节),足够存储一个经过序列化的对象了。
本文到此为止,希望大家喜欢。