对象的本地保存
对象的特点:
* 对象“生活”在内存空间中,因此,程序一旦关闭,这些对象也都会被CLR的垃圾回收机制销毁。
* 程序第二次运行时,对象会以“全新”的状态出现,无法保留上次对象的运行状态。
* 如果希望第二次运行程序时能“重现”第一次运行时对象的“状态”, 则应用程序就必须采用某种方式将对象的各个属性的值保存到磁盘文件中, 这样在需要时可以从磁盘文件中重新设置对象的各个属性值,典型的方法就是使用文本文件保存对象的各个属性值。
要实现的功能:
* 将用户信息封装为对象的属性并保存在文本中。
* 将文本的信息还原成对象的属性并显示出来。
* 就是把输入的数据存到磁盘中但是磁盘不支持对象的保存所以要将数据序列化后再传入磁盘中 可以用反序列化再将数据从磁盘中取出来
序列化的保存与读取
序列化:序列化是将对象状态转换为可保存或传输的格式的过程,比如转化为二进制、xml、json等的过程。
反序列化:与序列化相对的是反序列化,它将流转换为对象,也就是将在序列化过程中所生成的二进制串、xml、json等转换成数据结构或者对象的过程
序列化的三种方式
二进制序列化保存
//以二进制的方式存入数据 需要给被传输入的数据添加可被序列化属性[Serializable]
//1.创建文件流
FileStream fileStream = new FileStream(路径, FileMode.Create);
//2.创建一个二进制序列化格式器 需要引入命名空间
BinaryFormatter bf = new BinaryFormatter();
//3.调用序列化格式器Serialize() 解析People对象,存入到fs文件流中
bf.Serialize(fileStream, People);
//关闭文件写入流
fileStream.Close();
反序列化
//第一种反序列化 就是把二进制传入的数据再以二进制的形式传递回来
private void button2_Click_1(object sender, EventArgs e)
{
//创建读取流
FileStream fileStream1 = new FileStream(路径, FileMode.Open);
//创建二进反序列化工具
BinaryFormatter bf1 = new BinaryFormatter();
//读取器的返回值类型是Object转换为需要的类型 并且用对应类型的变量接收
People peoples = (People)bf1.Deserialize(fileStream1);
textBox1.Text = peoples.Name;
textBox2.Text = peoples.DateTime.ToString();
//关闭
fileStream1.Close();
}
JSON序列化保存
JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。
> 数据交换是指,两个设备之间建立连接并互相传递数据的过程。
[] 代表数组,{} 代表对象 Name Age代表属性
[ {"Name":"1","Age":"1","NickName":"1"},{"Name":"1","Age":"1","NickName":"1"}]
//创建写入流 文件格式是json
FileStream fileStream = new FileStream(@"小小眼镜.json", FileMode.Create);
//创建json的序列化格式器 /需要引入using System.Runtime.Serialization.Json;命名空间
DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(People));
//以json的方式存入数据 需要给被传输入的数据添加可被序列化属性[Serializable]
//调用
jsonSer.WriteObject(fileStream, People);
//关闭
fileStream.Close();
反序列化
//json反序列化
private void button2_Click(object sender, EventArgs e)
{
//创建写入流 文件格式是json
FileStream fileStream = new FileStream(@"小小眼镜.json", FileMode.Open);
//创建json的序列化格式器 /需要引入using System.Runtime.Serialization.Json;命名空间
DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(People));
//返回值是Object用对应的返回值类型接收
People aa = (People)jsonSer.ReadObject(fileStream);
fileStream.Close();
}
第三方JsonMapper保存
在项目的上邮件 ==> 管理NUget程序包==>浏览标签==>搜索AWSSDk,Core==> 找到第一个==> 安装 ==>应用
People p1 = new People()
{
Name = "吴亦凡",
Age = 20,
Sex = "男"
};
string jsonstr = JsonMapper.ToJson(p1);
FileStream fs = new FileStream("data.josn", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(jsonstr);
sw.Close();
fs.Close();
反序列化
FileStream fs = new FileStream("data.josn", FileMode.Open);
StreamReader sr = new StreamReader(fs);
string jsonstr = sr.ReadToEnd();
sr.Close();
fs.Close();
People aa = JsonMapper.ToObject<People>(jsonstr);
MessageBox.Show(aa.Name);