- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安ASP维护基地 来源:黑客防线网安ASP维护基地 浏览次数:0 |
User usr = new User();
usr.FirstName = "John"
usr.LastName = "Smith";
当把上面数据序列化成JSON格式的文本时,最终会得到如下所示的形式:
{ FirstName : "John"
LastName : "Smith" }
借助于JavaScript内置支持的方法eval()或者ASP.NET AJAX提供的Sys.Serialization.JavaScriptSerializer类,我们可以在JavaScript代码中实现JSON文本串的反序列化(即再还原成最初的对象形式)。
在本文中,我们将专注于讨论使用ASP.NET AJAX提供的特有类来实现把一个JavaScript对象序列化为文本串,然后发送到服务器端,以及如何使用服务器端类JavaScriptSerializer把JSON文本串反序列化成原始的对象数据。
二、实现序列/反序列化的关键—JavaScriptSerializer
实现序列化及反序列化的对象是JavaScriptSerializer。下面,我们来具体地看一下这个对象的成员定义情况:
public class JavaScriptSerializer
{
//字段
internal const int DefaultMaxJsonLength = 0x200000;
internal const int DefaultRecursionLimit = 100;
internal const string ServerTypeFieldName = "__type";
//方法
static JavaScriptSerializer();
public JavaScriptSerializer();
public JavaScriptSerializer(JavaScriptTypeResolver resolver);
public T ConvertToType(object obj);
public T Deserialize(string input);
public object DeserializeObject(string input);
public void RegisterConverters(IEnumerable converters);
public string Serialize(object obj);
public void Serialize(object obj, StringBuilder output);
//属性
public int MaxJsonLength { get; set; }
public int RecursionLimit { get; set; }
internal JavaScriptTypeResolver TypeResolver { get; }
}
首先需要注意的是,如果嵌套的对象数目大于RecursionLimit属性中所定义的值100的话,序列化过程将会失败。显然,如果序列化后的字符串的长度超出MaxJsonLength属性所定义的值0x200000(即十进制的2,097,152)的话,序列化过程也会失败。
此外,通过上面代码也可以看出,对象将被序列化为一个StringBuilder对象,最后返回相应的字符串数据。其实,主要的工作是在私有方法SerializeValue()中完成的。在我们讨论这个方法之前,首先注意到,JavaScriptSerializer对象使用了JavaScriptTypeResolver对象。这个JavaScript类型解析器负责实现在字符串类型与其他类型之间的相互转换;当序列化定制对象时这一功能是非常重要的。还应注意的是,__type属性将被包含于JSON序列化文本中,以便标识对象的类型。之后,客户端会把JSON文本反序列化为原始的对象形式。
JavaScriptTypeResolver对象包括两个public类型的方法,一个负责把原始类型解析为字符串类型,另一个则负责把字符串解析为原始类型。这个类的原型定义如下所示:
public abstract class JavaScriptTypeResolver
{
//方法
protected JavaScriptTypeResolver();
public abstract&
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |