最近经常在说Json传值,Json序列化,什么是Json?什么又是Json的序列化和反序列化?
什么是 JSON ?
大家是否知道Json的全称?—JavaScript Object Notation(JavaScript 对象表示法),说白了Json就是一种字符串,一种带有格式的字符串,一种可读性很强,操作方便的字符串。因为Json字符串存储信息的方式和hashtable,Dictionary一样都是键值对的形式。
Json的结构很简单,也很复杂。简单是因为Json的结构只有两种:对象和数组。
对象和数组大家都很熟悉,在JS中对象的表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 “对象.key” 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [” 数值1”,”数值2”,”数值3”,…],取值方式和其他语言中一样,使用索引获取,字段值的类型和上面对象的属性值一样,可以是 数字、字符串、数组、对象几种。
说Json结构复杂是因为:Json可以通过对象、数组这2种结构的组合,从而形成任何复杂的数据结构。
Json实例:
{
"学生":
[
{"姓名":"小明","年龄":23},
{"姓名":"大憨","年龄":24}
]
}
上面这个Json对象,包含一个名为学生的数组,数组中的每条记录又是一个Json对象。对象有两个属性分别为:姓名和年龄。这就是一个既包含数组也包含对象的Json实例
说道Json是作为一种存储和交换文本信息的语法,这使我不得不想到XML。因为XML在这方面也是高手。他们有什么异同呢?
相同之处,他们都是纯文本,且有一定的格式都够保存传输数据,可以用JS来对其进行解析。不同之处在于,Json没有结束标签,格式相对简单,能够使用内建的 JavaScript eval() 方法进行解析。
除了上述之外,JSON和XML还有另外一个很大的区别在于有效数据率。JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力 。
Json的序列化和反序列化
这里的序列化主要就是为了传输方便,将要传输的对象序列化为二进制的数据流,效率极高,接收时通过反序列化转化成对象,从而达到一个传输的效果。简单点来说,序列化就是将对象转换成Json格式的字符串,反序列化就是逆过程,将Json串转换成对象。
实例
JS代码:建立学生对象数组
var stucheck = [ {"姓名":"小明","年龄":23},{"姓名":"大憨","年龄":24}]
//用stringify函数将对象stucheck序列化,提交到后台,增加分享记录
$.ajax({
type: "POST",
url: "/VideoPlayer/AddVideoShareRecordList",
data: { stuList: JSON.stringify(stucheck) },
success: function (data) {
if (data == true) {
alert("分享视频成功!");
} else {
alert("分享失败,请检查网络!");
}
}
});
后台解析:
public bool AddStuRecordList()
{
//获取Json串
string stuList = Request["stuList"];
//声明一个学生的实体集合
List<StuRecord> stuAddList = new List<StuRecord>();
//声明一个servializer 类用来完成Json的反序列化
JavaScriptSerializer servializer = new JavaScriptSerializer();
//完成Json的反序列化
stuAddList = servializer.Deserialize<List<StuRecord>>(stuList);
bool isok = AddRecordList(stuAddList);
return isok;
}
注意:JS中的对象和后台中的对象应该保持一致,才能完全转换。在后台进行序列化和反序列化需要引入插件,JavaScriptSerializer 或者 Newtonsoft.Json.JsonConvert,添加引用即可。
以上就是对Json的一些简单了解,不正确的地方请指出。