【数据传输 1】服务器—>客户端之间的数据类型转换
导读:在做项目的时候,在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】服务器—>客户端之间的数据类型转换的更多相关文章
- SQL不同服务器数据库之间的数据操作整理(完整版)
		---------------------------------------------------------------------------------- -- Author : htl25 ... 
- SQLServer服务器数据库之间的数据操作(完整版)
		分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ... 
- 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .
		---------------------------------------------------------------------------------- -- Author : htl25 ... 
- 不同服务器数据库之间的数据定时同步到sql server (支持mysql,oracle数据库同步到sql server)
		1,在目标数据库新增服务器对象->连接到服务器->新建服务器连接 2,编写数据同步业务PROC ALTER PROC TestProc AS BEGIN --打开完全事物回滚 SET XA ... 
- 不同服务器数据库之间的数据操作 sp_addlinkedserver
		--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrv ... 
- [转]MYSQL 与 Oracle 之间的数据类型转换
		原文地址:http://www.cnblogs.com/guyueyanzi/archive/2010/02/27/1674788.html Table 2-4 Default Data Type M ... 
- Mysql与Oracle之间的数据类型转换
		MySQL Data Type Oracle Data Type BIGINT NUMBER(19, 0) BIT RAW BLOB BLOB, RAW CHAR CHAR DATE DATE DAT ... 
- 异构关系数据库(Sqlserver与MySql)之间的数据类型转换参考
		一.SqlServer到MySql的数据类型的转变 编号 SqlServer ToMySql MySql 1 binary(50) LONGBLOB binary 2 bit CHAR(1) bit ... 
- 异构关系数据库(Sqlserver与Oracle)之间的数据类型转换参考
		一.Oracle到SqlServer的数据类型的转变 编号 Oracle ToSqlServer SqlServer 1 BINARY_DOUBLE VARCHAR(100) real 2 BINAR ... 
随机推荐
- Xcode7.1环境下上架iOS App到AppStore 流程 转
			来自:http://www.cnblogs.com/ChinaKingKong/p/4957682.html 前言部分 之前App要上架遇到些问题到网上搜上架教程发现都是一些老的版本的教程 ,目前iT ... 
- Objective-C和 C++ 混编的要点(转)
			Using C++ With Objective-C苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++.有 ... 
- IIS6配置FastCGI遇到ERROR5的解决方法
			FastCGI Error The FastCGI Handler was unable to process the request. ------------------------------- ... 
- new几种用法
			在 C# 中,new 关键字可用作运算符.修饰符或约束. new 运算符 用于创建对象和调用构造函数. new 修饰符 用于向基类成员隐藏继承成员. new 约束 用于在泛型声明中约束可能用作类型参数 ... 
- AlertDialog的几种用法
			xml代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ... 
- git push时报错filename too long的解决
			命令行输入:git config core.longpaths true 之后再进行 git 的push命令 
- mongodb多条件查询总结
			根据两字段乘积过滤查询分页数据 db.cron.aggregate([{$project:{_id:,AppID:,result:{$add:["$endlottery",&quo ... 
- ssm框架搭建(上)
			前言 之前也说过,工作做的开发都是基于公司现有的框架,心里很没底.所以一直想自己能够搭建出ssm框架.经过多次尝试,终于成功了.这边文章将从两个方面进行,一是框架搭建,二是简单的增删查改. 正文 1. ... 
- es5/6数组遍历以及常用的一些方法
			数组的遍历方法 1...for(var i=0;i<arr.length;i++){ } ---------------------------------------------------- ... 
- Windows各个文件夹介绍
			windows文件介绍 总结 ├WINDOWS │ ├-system32(存放Windows的系统文件和硬件驱动程序) │ │ ├-config(用户配置信息和密码信息) │ │ │ └-system ... 
