导读:在做项目的时候,在controller中,将List数据类型转换为了JSON字符串,那么,为什么要将其数据转换为JOSN呢?这样的转换是否是必须的,在这个转换过程中,又经过了那些步骤?注:本篇博客的所有观点,仅代表笔者目前的学习状态。

一、客户端

1.1,为什么转换

当我们看到一个网页,不管是多么复杂和简单的网页, 我们查看其源文件,看到的是一系列的文本内容。那么是不是可以理解为:一个网页,能够解析或者说能够显示的最终画面,是文本型的数据。

所以,问题就来了,当服务器端接收到客户端的请求,去向库里访问数据时,从库里面流出来的数据并不是,或者说并不一定都是文本类型。所以,我们需要将服务器端响应的数据,进行转换为客户端能够解析的数据类型。

1.2,客户端可以解析的数据类型

在客户端可以解析的数据类型,从大体上来说是文本类型。那么再细点说,有XML文件格式的,也有JOSN格式的。那么既然只要是文本类型的,客户端都可以识别读取,我们在做网页的时候,究竟转成哪一种数据类型呢?先来看看XML和JOSN的基本情况:

1.2.1,基本概念

XML(Extensible Markup Language):能够以灵活有效的方式定义管理信息的结构。以XML格式存储的数据不仅有良好的内在结构,而且由于它是W3C提出的国际标准,因而受到广大软件提供商的支持,易于进行数据交流和开发。现有网络管理标准如TMN、SNMP等的管理信息库规范决定了网管数据符合层次结构和面向对象原则,这使得以XML格式存储网管数据也非常自然,易于实现。

JSON(JavaScript Object Notation) :是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

1.2.2,XML和JOSN关系

先吐一下槽,本来是想找个性能测试的工具,来实际测试一下XML和JOSN的解析效率的,但是找了半天没有找到,然后查到了很多关于XML和JOSN解析效率的文章,我个人暂时没有亲身测试过,不过大家都那样讲,目前,我也就那么信。结论:JOSN的解析效率要高于XML。可是,问题就是,既然JOSN要由于XML,为什么XML还没有被淘汰呢?

原因:首先应该清楚他们各自的功用,XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)。在XML中,更为突出的是XML对于数据的格式定义更为严格,对于规范数据有它不可小觑的优势。其次,XML并不依赖于某一浏览器,而且操作极其简单。最后,XML有着自解析的功能,虽然JOSN也可以实现自解析,但是相对来说,XML有它的优势。

1.2.3,扩展BOSN

既然说JOSN优于XML,那么还有没有更优良的数据解析方式呢,那就是BSON。

BSON(Binary Serialized Document Format):是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,BSON有三个特点:轻量性、可遍历性、高效性。例子:{"hello":"world"} ,其中"hello"是key name,它一般是cstring类型,字节表示是cstring::= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。


二、服务端

ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。 ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。ADO.NET的一个核心组件是:DataSet对象,相当于本地数据库,它与数据库无关的,它和远程数据库连接的桥梁就是.NET数据提供程序。它是由多个表(DataTable)构成,每个表都是一个DataTable对象。那么,当服务器端从库里将数据取出的时候,作为最原始的数据类型大概是:DataTable。可是我们说DataTable的数据传输不符合面向对象的思想,所以,我们将DataTable类型转换为List类型。后来我们又开始使用哈希表等等等。

也就是说,一个简单的从服务器端到客户端的 数据类型转换是:DataTable——List——JOSN。如果说从DataTable—List是为了迎合面向对象的思想,是一种性能结构上的优化,那么从List到JOSN可以说单纯的就是为了网页显示的需要,相对来说就仅仅只是一种功能需求了。


三、总结

那么我们说要将DataTable转换为list格式,它的原因是什么?具体的实现是什么?如果说我们到客户端的 最终形式是JOSN,那么我们又将怎样进行转换呢?当我们将服务器端的数据显示到页面上,我们经历了一个序列化的过程,当我们将数据从页面上发送至服务器请求数据,又经历了一个反序列化的过程。那么,这一个序列化和反序列化的过程是不是必须的呢?



posted on 2015-12-01 21:47  何红霞  阅读(438)  评论(0编辑  收藏  举报