手机版

在中序列化和反序列化JSON的几种方法 网

时间:2021-08-31 来源:互联网 编辑:宝哥软件园 浏览:

首先,什么是JSON

JSON是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的子集,使用完全独立于编程语言的文本格式来存储和表示数据。简单明了的层次结构使JSON成为一种理想的数据交换语言。便于人们读写,也便于机器分析和生成,可以有效提高网络传输效率。

它是JavaScript用来处理数据的一种格式。大部分用于处理JavaScript和web服务器之间的数据交换,然后将数据从后台web服务器传输到前台,再用JavaScript进行处理,比如ajax,它是一种独立于语言和平台的轻量级数据交换格式。

第二,JSON语法

1.JSON语法规则

在JS中,一切都是对象。因此,任何支持的类型都可以用JSON来表示,比如字符串、数字、对象、数组等等。但是对象和数组是两种特殊且常用的类型:

对象被表示为键值对。数据用逗号保存。对象由括号保存。在JS中,数组对象用大括号包装。数据结构是{key1: value1,key2: value2,}.在面向对象语言中,键是对象的属性,值是对应的值。键名可以用整数和字符串表示。值的类型可以是任何类型。

{'firstname' :' Brett ',' lastname' :' McLaughlin'}数组:该数组在JS中用方括号[]包装,数据结构为[]的索引结构。net ',' JavaScript ',' python ',].在JS中,数组是一种特殊的数据类型。它也可以像对象一样使用键值对,但是它更多地被索引使用。同样,值类型可以是任何类型。

{ '民' : [{ '名' : '张','姓' : '三' },{ '名' : '李','姓' : '斯' } } 2 . }。JSON键/值对

JSON键值对是保存JS对象的一种方式,类似于书写中的JS对象。键/值对中的键名写在前面,用双引号“”括起来,用冒号:隔开,后面跟着值:{'firstName' :' Json'},很容易理解,相当于这个JavaScript语句:{first name :' JSON '。

3.JSON和JS对象之间的关系

JS对象之间的关系可以理解为:JSON是JS对象的字符串表示,用文本来表示一个JS对象的信息,其本质是一个字符串。例如:

var obj={a: 'Hello ',b : ' World ' };//这是一个对象。注意,键名也是varjson=' {'a' :' hello ',' b' :' world'} '可以用引号括起来。//这是一个JSON字符串,本质上是字符串4。JSON和JS对象相互传递

要从对象转换为JSON字符串,请使用JSON.stringify()方法:

var JSON=JSON . stringify({ a : ' Hello ',b : ' World ' });//结果是“a ' : ' hello ',' b' :' world'}”。要实现从JSON到对象的转换,使用JSON.parse()方法:

var obj=JSON . parse({ ' a ' : ' Hello ',' b ' : ' World ' } ');//结果是{a: 'Hello ',b: 'World'} iii。Json序列化方法

1、JavaScript序列化程序

使用JavaScriptSerializer时需要引入的命名空间在程序集System.Web.Extensions.dll中。

使用系统。Web.Script .序列化;附言:未序列化的属性可以用[脚本忽略]标记

代码:

公共操作结果getjsondemo(){//对象DataModel model=new DataModel();模特。ID=1;模特。名字='章三';模特。性别='女';模特。年龄=18岁;//对象序列化JSON字符串str JSON=JSON helper . objectto JSON(模型);//Json反序列化对象模型=jsonhelper . jsontobjectdatamodel(str Json);String strContent='对象序列化:' strJson '\n ' '反序列化的值:' model . name ' ' model . sex ' ' model . age;返回内容(strContent);}JsonHelper:

公共类JsonHelper{ #region第一种Java Script语言序列化程序//使用Java Script语言序列化程序方式需要引入的命名空间,这个在程序集系统。网络扩展.中//使用系统网络。剧本。序列化;//注:可用[脚本忽略]标记不序列化的属性///摘要///序列化////summary////param name=' obj '/param///returns/returns public static string ObjectToJson(object obj){ JavaScript serialize jsonSerialize=new JavaScript serialize();返回jsonSerialize .序列化(obj);} ///摘要///反序列化////summary///type param name=' T '/type param///param name=' strJson '/param///returns/returns public static T jsontobjectt(string strJson){ JavaScript serialize jsonSerialize=new JavaScript serializer();//jsonSerialize .反序列化动态(strJson);//取值模型['名称'];要使用索引取值,不能使用对象。属性返回jsonSerialize .反序列化(strJson);} # endregion }结果:

2、JSON .网

使用Json .网类库需要引入的命名空间使用牛顿英尺.数据

PS:可用[JsonIgnore]标记不序列化的属性

代码:

公共操作结果GetJsonDemo(){//对象DataModel model=new DataModel();模特ID=2;模特。名称=' LiSi模特。性别='男;模特。年龄=20岁;//对象序列化数据字符串strJson=JsonHelper .ObjectToJson(模型);//Json反序列化对象型号=JsonHelper .jsontobjectdatamodel(Strjson);字符串' strContent='对象序列化:" StrJSon"\ n " "反序列化值:'模型。名为""的模型。性爱模特。年龄;返回内容(strContent);}JsonHelper:

///摘要///Json帮助类////summarypublic类JsonHelper{ #region第二种JSON。NET/使用Json .网类库需要引入的命名空间使用牛顿英尺.Json//注:可用[JsonIgnore]标记不序列化的属性///摘要///序列化////summary////param name=' obj '/param///returns/returns public static string ObjectToJson(object obj){ return JsonConvert .SerializeObject(obj);} ///摘要///反序列化////summary///type param name=' T '/type param///param name=' Strjson '/param///返回/返回公共静态T jsontobjectt(字符串strJson){返回JsonConvert .反序列化对象(STrJSon);} #endregion}Result:

3、DataContractJsonSerializer

使用DataContractJsonSerializer方式需要引入的命名空间,在系统。运行时序列化.中。

使用系统。运行时。序列化。Json实体中的契约[数据成员],[数据合同],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方式可加可不加。

PS:可用[IgnoreDataMember]标记不序列化的属性

代码:

公共操作结果GetJsonDemo(){//对象DataModel model=new DataModel();模特ID=3;模特。名字='吴王;模特。性别='女;模特。年龄=22岁;//对象序列化数据字符串strJson=JsonHelper .ObjectToJson(模型);//Json反序列化对象型号=JsonHelper .jsontobjectdatamodel(Strjson);字符串' strContent='对象序列化:" StrJSon"\ n " "反序列化值:'模型。名为""的模型。性爱模特。年龄;返回内容(strContent);}JsonHelper:

///摘要///Json帮助类////summarypublic类JsonHelper{ #region第三种DataContractJsonSerializer //使用DataContractJsonSerializer方式需要引入的命名空间,在系统。运行时序列化.中//使用系统。运行时。序列化。Json//注:可用[IgnoreDataMember]标记不序列化的属性//实体中的契约[数据成员],[数据合同],是使用DataContractJsonSerializer序列化和反序列化必须要加的//对于其他两种方式不必加,也可以的///摘要///序列化////summary///param name=' obj '/param///返回/返回公共静态字符串ObjectToJson(对象obj)使用(内存流=新内存流()){ DataContractJsonSerializer jsonSerialize=新DataContractJsonSerializer(obj .GetType());jsonSerialize .WriteObject(stream,obj);返回编码. UTF8。GetString(流. to array());} } ///摘要///反序列化////summary///type param name=' T '/type param///param name=' Strjson '/param///返回/返回公共静态T JsonToObjectT(字符串strJson){ 0使用(内存流=新的内存流(编码.UTF8。GetBytes(strJson))){ DataContractJsonSerializer jsonSerialize=new DataContractJsonSerializer(类型为(T));返回jsonSerialize .ReadObject(流);} } #endregion}Result:

PS:数据模型

[数据合同]公共类DataModel {[DataMember]public int ID { get;设置;}[数据成员]公共字符串名称{获取设置;}[数据成员]公共字符串做爱设置;}[DataMember]public int Age { get;设置;}}四、总结

1、JSON序列化有三种方式

Java Script语言序列化程序类JSON .网类库DataContractJsonSerializer类2、尽量使用JSON .NET(开源)来序列化和反序列化,性能好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:在中序列化和反序列化JSON的几种方法 网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。