
反序列化就是上述的逆过程。
比如我们把json格式的对象转换成字符串,再转换成char*,这样就能在网络上传输,或者写进硬盘——由结构化的数据转成地址值反过来我们把从网络上接收到的字符串对象转成json对象,就是重新构建出json对象结构,这就是反序列化可以看到msg对应的值是一个json,两个json赋值给msg后变成了一个json,而且,js["msg"]["liu shuo"]的意义就是先访问js的键msg,再访问msg中的键liu shuo,还有就是,liu和zhang的顺序也被改了,因为两者在msg这个json里面就是键,是有顺序的在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化 *** 作,Newtonsoft.Json组件是专门用来序列化和反序列化 *** 作的一个功能组件,引入这个DLL组件后,就可使用JsonConvert.DeserializeObject方法来反序列化字符串为对象,JsonConvert.DeserializeObject方法有2个重载方法签名,都是可用于C#中字符串的反序列化 *** 作。
在具体需要字符串反序列化的地方调用JsonConvert.DeserializeObject方法。具体例子如下:有个前台传入的序列化字符串jsonStr,需要将之反序列化为TestModel对象,可使用下列语句进行实现。序列化(Serialization),有的人也称之为反解析。指的是将对象的状态信息转换为可以存储或传输的形式的过程。
而反序列化,有的人成为解析。指的就是序列化的逆过程。
图1. 序列化与反序列化
例如,定义如下结构体 book,我们可以创建一个实体对象,bookObj,此时 bookObj 是一个在程序中的实体对象。若我要存储这个对象,或者将其通过 HTTP 进行传输,我就需要将其进行序列化为可以进行存储或者传输的文件形式,例如 json。
package main
import (
"fmt"
"time"
)
type Book struct {
Name string
Author string
PublishTime time.Time
}
func main() {
bookObj := &Book{
Name:"Go 语言基础入门",
Author: "fxtack",
PublishTime: time.Now(),
}
fmt.Println(bookObj)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
若进行序列化,序列化后的 bookObj 对象的 JSON 格式为(注意,结构体字段名与 JSON 中的字段名并不是完全相等的):
{
"name": "Go 语言基础入门",
"author": "fxtack",
"publishTime": "2021-07-03T18:23:57.7451495+08:00"
}
1
2
3
4
5
1
2
3
4
5
这样我就可以通过存储和传输 json 来实现对 bookObj 对象的存储和传输了。
相应的,如果需要这个对象而读取 json 文件,或者传输的接收者收到这个对象的 json 并打算使用这个对象时,就需要通过反序列化,将其从 json 的格式重新转化为程序中的对象。
1、遍历 json 对象的属性//定义json对象 var person= { name: 'zhangsan', pass: '123', fn: function(){ alert(this.name+"的密码="+this.pass)} } //遍历person属性包括方法,如果不想显示出方法,可用typeof(person[item])== "function"来判断 for(var item in person){ alert("person中"+item+"的值="+person[item]) }
2、动态为 json对象 添加属性
需要 使用1中的 person对象
var copyPerson={} //创建copyPerson对象,将person中的属性包括方法copy给该对象 for(var item in person){ copyPerson[item]= person[item] //这样循环就可以将person中的属性包括方法copy到copyPerson中了 } for(var item in copyPerson){ alert("copyPerson中"+item+"的值="+person[item]) }
注意:使用 Ext.apply(copyPerson, person) 也可以 将person中的所有属性包括方法 copy到 copyPerson中
3、遍历 普通js对象的 属性
//定义一个普通的js类,包含方法 var p= function (){ this.name= '李四' this.pass= '456' this.fn= function(){alert(this.name+"的密码="+this.pass) } } var pp= new p() //生成一个p类的对象 pp for(var item in pp){ //遍历pp对象中的属性,只显示出 非函数的 属性,注意不能 遍历 p这个类 if(typeof(pp[item])== "function")continue alert("p对象中"+item+"的属性="+pp[item]) }
普通的 js对象 也可以copy,copy方法和 2.动态为 json对象 添加属性 思路一样。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)