序列化与反序列化
定义
序列化:就是将对象转换为二进制
反序列化:二进制转换为对象
作用
作用:传输数据
序列化步骤
- 在类前加上[Serializable],指示一个类可以序列化。
- 创建序列化对象 BinaryFormatter
- 调用Serialize 序列化
如下面例子,生成一个二进制文件
public class Person
{
private string _name;
private char _gender;
private int _age;
public string Name { get => _name; set => _name = value; }
public char Gender { get => _gender; set => _gender = value; }
public int Age { get => _age; set => _age = value; }
}
调用
static void Main(string[] args)
{
Person p = new Person();
p.Name = "张三";
p.Age = 18;
p.Gender = '男';
using (FileStream fsWrite = new FileStream(@"C:\Users\hp\Desktop\1.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
//序列化对象
BinaryFormatter f = new BinaryFormatter();
f.Serialize(fsWrite, p);
}
}
反序列化
- 在类前加上[Serializable],指示一个类可以序列化。
- 创建序列化对象 BinaryFormatter
- 调用Deserialize 序列化
Person p;
using (FileStream fsRead = new FileStream(@"C:\Users\hp\Desktop\1.txt",FileMode.OpenOrCreate,FileAccess.Read))
{
//创建反序列化对象
BinaryFormatter bf = new BinaryFormatter();
p = (Person)bf.Deserialize(fsRead);
}
Console.WriteLine(p.Name);
Console.WriteLine(p.Gender);
Console.WriteLine(p.Age);
Console.ReadKey();
打印效果
下面我们来学习序列化为xml格式文件
- 创建xml序列化对象 XmlSerializer
- 调用 Serialize 反序列化 Deserialize
public struct pca
{
public string ID;
public string SN;
public string X;
public string Y;
public string Angle;
}
private void button3_Click(object sender, EventArgs e)
{
pca p = new pca();
p.ID = textBox1.Text;
p.SN = textBox2.Text;
p.X = textBox3.Text;
p.Y = textBox4.Text;
p.Angle = textBox5.Text;
string path = @"C:\Users\hp\Desktop\5.xml";
//创建 xml序列化对象
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
XmlSerializer xs = new XmlSerializer(typeof(pca));
xs.Serialize(fs, p);
}
MessageBox.Show("保存成功");
}
private void button2_Click(object sender, EventArgs e)
{
//反序列化
string path = @"C:\Users\hp\Desktop\5.xml";
XmlSerializer xs = new XmlSerializer(typeof(pca));
pca p;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
p=(pca) xs.Deserialize(fs);
}
textBox1.Text = p.ID ;
textBox2.Text= p.SN ;
textBox3.Text= p.X ;
textBox4.Text= p.Y ;
textBox5.Text= p.Angle;
}