详数JSON数据类型的使用于说明技巧
创始人
2024-06-19 20:51:05
0

首先需要注意的是,如果嵌套的对象数目大于JSON数据类型中所定义的值100的话,序列化过程将会失败。显然,如果序列化后的字符串的长度超出MaxJsonLength属性所定义的值0x200000(即十进制的2,097,152)的话,序列化过程也会失败。

此外,通过上面代码也可以看出,对象将被序列化为一个StringBuilder对象,***返回相应的字符串数据。其实,主要的工作是在私有方法SerializeValue()中完成的。在我们讨论这个方法之前,首先注意到,JavaScriptSerializer对象使用了JavaScriptTypeResolver对象。#t#

这个JavaScript类型解析器负责实现在字符串类型与其他类型之间的相互转换;当序列化定制对象时这一功能是非常重要的。还应注意的是,__type属性将被包含于JSON数据类型中,以便标识对象的类型。之后,客户端会把JSON数据类型为原始的对象形式。

JavaScriptTypeResolver对象包括两个public类型的方法,一个负责把原始类型解析为字符串类型,另一个则负责把字符串解析为原始类型。这个类的原型定义如下所示:

  1. public abstract class JavaScriptTypeResolver  
  2.  
  3. {  
  4.  
  5.      //方法  
  6.  
  7.      protected JavaScriptTypeResolver();  
  8.  
  9.      public abstract Type ResolveType(string id);  
  10.  
  11.      public abstract string ResolveTypeId(Type type);  
  12.  

显然,上面这个JavaScriptTypeResolver类是一个抽象基类;因此,必须通过其他对象进一步派生使用,从而最终实现在原始类型与字符串之间的相应解析。现在,我们可以使用的对象是SimpleTypeResolver,而且JSON数据类型也正好实现了上面所要求实现的方法—使用System.Type对象实现字符串描述形式与原始Type对象之间的相互解析。请看下面的例子:

  1. public override Type ResolveType(string id)  
  2.  
  3. {  
  4.  
  5.      return Type.GetType(id);  
  6.  
  7. }  
  8.  
  9. public override string ResolveTypeId(Type type)  
  10.  
  11. {  
  12.  
  13.      if (type == null)  
  14.  
  15.      {  
  16.  
  17.          throw new ArgumentNullException("type");  
  18.  
  19.      }  
  20.  
  21.      return type.AssemblyQualifiedName;  
  22.  

***,JavaScriptSerializer对象还有可能使用JavaScriptConverter对象,因为内置的序列化过程无法实现对于所有可用数据类型的序列化。在这种情况下,可以从抽象基类JavaScriptConverter对象派生一个子类,由它来实现特定类型数据的序列/反序列化。

可以使用JavaScriptSerializer对象的RegisterConverters()方法注册一个转换器对象。此方法把所有的转换器对象存储在一个Dictionary对象中;针对多种不同的数据类型的转换器经注册后都会存储在此字典对象中。概括来看,这个Dictionary对象被定义如表格1所示的一些JSON数据类型

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...