ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON

时间:2022-01-05 15:43:15

最 近项目开始比较多的使用JSON来传递数据了,首先介绍下什么是JSON吧,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类的serialize和 deserialize两个静态方法提供。在服务器端,所有的序列化与反序列化能力,包括类型之间的转换,对于开发人员来说都是由 JavaScriptSerializer类的几个方法实现的。


在JavaScriptSerializer中,我们可以看到下面可以使用的方法或者构造函数,它们都是实例方法:
Member Description
JavaScriptSerializer() 构造函数,用于创建一个新的JavaScriptSerializer对象,不指定JavaScriptTypeResolver
JavaScriptSerializer(JavaScriptTypeResolver) 构造函数,用于创建一个新的JavaScriptSerializer对象,并使用指定的JavaScriptTypeResolver来映射特定类型与标识字符串。
ConvertToType<T>(Object) 将给定对象转化成类型T。
Deserialize<T>(String) 将JSON字符串转化为类型T。
DeserializeObject(String) 将JSON字符串转化为一个对象。
MaxJsonLength 获取或者设置序列化时能够接受的JSON字符串的最大长度。
RecursionLimit 获取或者设置在反序列化JSON字符串时递归的最大深度。
RegisterConverters(IEnumerable<JavaScriptConverter>) 注册序列化过程中使用的JavaScriptConveter对象。
Serialize(Object) 将一个对象序列化成JSON字符串。
Serialize(Object, StringBuilder) 将一个对象序列化到一个StringBuilder中。

这里我只提供一个简单的demo看看效果,后面我再陆续介绍吧,首先创建一个用户实体类:

public class UserInfo  {
      public Int32 Id { get; set; }
      public String UserName { get; set; }
      public DateTime Time { get; set; } 
      public bool Gender { get; set; }  }
接下来在Page_Load里面写下面代码。
protected void Page_Load(object sender, EventArgs e)
  {
      UserInfo info = new UserInfo();
      info.Id = 1;
      info.UserName = "猫博 http://maoblog.com";
      info.Time = DateTime.Now;
      info.Gender = true;
        System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
      String strJson = jss.Serialize(info);
      Response.Write(strJson);
        //输出结果:
      //{"Id":1,"UserName":"猫博 http://maoblog.com","Time":"\/Date(1297950721668\/","Gender":true}
        UserInfo info2 = jss.Deserialize<UserInfo>(strJson);
      Response.Write(String.Format("<br/>{0}<br/>{1}<br/>{2}<br/>{3}", info2.Id, info2.UserName, info2.Time, info2.Gender));
      Response.End();
      //结果:      //1      //猫博 http://maoblog.com      //2011/2/17 14:00:29      //True  }