欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中Cookie之存储对象

程序员文章站 2023-12-12 17:09:52
本文通过代码详细给大家做讲解,具体内容如下: 做项目过程中,用户登陆之后,需要将用户的信息存到cookie中,但因为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(差也就差一两个字节),足够存储一个经过序列化的对象了。

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

上一篇:

下一篇: