当前位置: 移动技术网 > IT编程>开发语言>c# > C#中Cookie之存储对象

C#中Cookie之存储对象

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

做项目过程中,用户登陆之后,需要将用户的信息存到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(差也就差一两个字节),足够存储一个经过序列化的对象了。

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网