序列化,反序列化
其实就是转换数据格式的过程。
序列化 (Serialization)
是将【对象的状态信息】转换为【可以存储或传输的形式】的过程。即:把C#中的类 转换成 JSON格式的字符串,就是序列化。其中【对象的状态信息】就是类的各种属性。
反序列化:
JSON格式的字符串 转换成 C#中的类,就是反序列化。
JSON格式的字符串操作时,不方便。如:"{“name”:“dsh”,“age”=20,“sex”=false}"就是JSON格式的字符串,取某个键的值时,需要字符串截取,相对麻烦,通过反序列化,把这种JSON格式的字符串转换成C#中的类对象,就可以方便获取某个属性值。
JSON是一种轻量级的数据交互格式。和xml这种数据格式相比,在传输过程中比较轻量的,传输的快。
3。JSON?序列化?反序列化?
JSON:JavaScript Object Notation(JavaScript 对象表示法),是一种简单且流行的数据交换格式。
JSON格式的数据在互联网上传输时,比 XML 更小、更快,更易解析。
JSON格式的数据在Web项目中使用的很多,特别表现在请求web接口数据时,一般web接口返回的数据都是JSON格式,在WinForm项目中相对少。
数据交换格式:纯文本、html、xml(WebService)、json
B/S Browser/Server C/S Client/Server
JSON语法:
1。属性名称必须使用双引号包裹
2。属性值,如果是字符串用双引号包裹,如果是数字不需要包裹,如果是布尔不需要包裹,如果是日期
3。最后一项({},[])的逗号分割符不能要。
JSON 语法是 JavaScript 对象表示语法的子集。
数据在名称/值对中
数据由逗号 , 分隔
使用斜杆 \ 来转义字符
大括号 {} 保存对象
中括号 [] 保存数组,数组可以包含多个对象
JSON格式观察一下,其实是一个大对象{},有属性,属性值可以是[],数组中有可能嵌套对象。
JSON就是一个数组和对象之间互换嵌套的一种数据格式。互换嵌套形成一个无限层级的大数据。
JSON解析工具,如:https://www.x-json.cn/
浏览器JSON-handle插件
https://chrome.zzzmh.cn/search/jsonhandle
JSON序列化及反序列化重要类库:newtonsoft.json
// 序列化特性可以省略,默认C#类对象,就可以支持序列化[Serializable]public class Person{public int Id { get; set; }public string Name { get; set; }public bool Sex { get; set; }public DateTime Birthday { get; set; }public string[] Fav { get; set; }public Person Friend { get; set; }public override string ToString(){return "{ \"Id:\"" + this.Id + "\"Name:\"" + this.Name + "}";}}
string jsonString = string.Empty;
// C#中的对象(万物皆对象)Person p = new Person(){Id = 1,Name = "张三",Sex = true,Birthday = DateTime.Now,Fav= new string[] { "吃", "喝" },Friend = new Person() { Id = 2, Name = "李四", Sex = false, Birthday = DateTime.Now }};
// 默认类的ToString()方法,不能用来序列化成JSON格式的字符串,如果想用它来序列化成JSON格式的字符串
// 需要开发者重写ToString()逻辑。重写逻辑时,拼接字符串很麻烦。
//MessageBox.Show(p.ToString());
// 序列化:把C#中的类对象 转换成 JSON格式的字符串。
// 好处:方便存储,方便传输。
jsonString = JsonConvert.SerializeObject(p);MessageBox.Show(jsonString);
结果
// 反序列化:JSON格式的字符串 转换成 C#中的类对象。
// 为啥要反序列化?JSON格式的字符串操作时,不方便。把它反序列化成C#对象,方便使用。
// un取反意思 de取反的意思
Person p2 = JsonConvert.DeserializeObject<Person>(jsonString);
MessageBox.Show(p2.Name+","+ p2.Friend.Name);
结果