导读:在做项目的时候,在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,那么我们又将怎样进行转换呢?当我们将服务器端的数据显示到页面上,我们经历了一个序列化的过程,当我们将数据从页面上发送至服务器请求数据,又经历了一个反序列化的过程。那么,这一个序列化和反序列化的过程是不是必须的呢?

【数据传输 1】服务器—>客户端之间的数据类型转换的更多相关文章

  1. SQL不同服务器数据库之间的数据操作整理(完整版)

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  2. SQLServer服务器数据库之间的数据操作(完整版)

    分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...

  3. 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  4. 不同服务器数据库之间的数据定时同步到sql server (支持mysql,oracle数据库同步到sql server)

    1,在目标数据库新增服务器对象->连接到服务器->新建服务器连接 2,编写数据同步业务PROC ALTER PROC TestProc AS BEGIN --打开完全事物回滚 SET XA ...

  5. 不同服务器数据库之间的数据操作 sp_addlinkedserver

    --创建链接服务器  exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '  exec sp_addlinkedsrv ...

  6. [转]MYSQL 与 Oracle 之间的数据类型转换

    原文地址:http://www.cnblogs.com/guyueyanzi/archive/2010/02/27/1674788.html Table 2-4 Default Data Type M ...

  7. Mysql与Oracle之间的数据类型转换

    MySQL Data Type Oracle Data Type BIGINT NUMBER(19, 0) BIT RAW BLOB BLOB, RAW CHAR CHAR DATE DATE DAT ...

  8. 异构关系数据库(Sqlserver与MySql)之间的数据类型转换参考

    一.SqlServer到MySql的数据类型的转变 编号 SqlServer ToMySql MySql 1 binary(50) LONGBLOB binary 2 bit CHAR(1) bit ...

  9. 异构关系数据库(Sqlserver与Oracle)之间的数据类型转换参考

    一.Oracle到SqlServer的数据类型的转变 编号 Oracle ToSqlServer SqlServer 1 BINARY_DOUBLE VARCHAR(100) real 2 BINAR ...

随机推荐

  1. oracle 10g standby 设置

    ##########sample alter system set log_archive_dest_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=bo ...

  2. PHP连接数据操作步骤

    数据库的操作步骤: 端口号:0到65535 3306:mysql数据库的默认端口号(可修改) mysql_connect(“本机地址”,“用户名”,“密码”,); new_link:如果用同样的参数第 ...

  3. AJPFX总结Collection集合(下)

    List集合特有方法 特有方法.凡是可以操作角标的方法都是该体系特有的方法. 增          add(index,element);在指定位置添加元素          addAll(index ...

  4. mysql索引原理及创建与查询

    索引介绍 一:为什么要有索引 索引是用来优化查询效率(速度)的 没有索引的话,对于大数据的表,就只能每次都遍历一遍,数据量越大,耗时越多有索引的话,可以提升好几个数量级的速度 一般的应用系统,读写比例 ...

  5. Redis为什么这么快

    Redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1): 2.数据结构简单, ...

  6. php中的define()函数

    <?php define("PI",3.1415926); //定义常量 $r=12;//定义圆半径 echo "半径为12的单位的圆的面积".PI*($ ...

  7. centos 6.2用yum安装中文输入法

    centos 6.2用yum安装中文输入法 1.su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system-> ...

  8. 在docker容器中运行hello world!

    在docker容器中运行hello world! docker容器可以理解为在沙盒中运行的进程.这个沙盒包含了该进程运行所必须的资源,包括文件系统.系统类库.shell 环境等等.但这个沙盒默认是不会 ...

  9. android应用流量信息提取

    Linux 系统下所有的信息都是以文件的形式存在的,所以应用程序的流量信息也会被保存在操作系统的文件中.Android 2.2 版本以前的系统的流量信息都存放在 proc/net/dev(或者 pro ...

  10. 深入Docker 存储驱动 (转)

    参考: http://static.dockerone.com/ppt/filedriver.html#28