序列化

 .net中对象的序列化是指将对象的状态存储起来,先将对象的字段和属性以及类名转换为字节流,然后再把字节流写入数据流。通过对对象反序列化,得到原对象完全相同的副本。

对象的序列化主要的目的是将对象持久化,经过持久化的对象可以从一个地方传输到另一个地方。


在.net中, IFormatter接口提供了对象序列化的功能。他有两个公有的方法:

反序列化对象方法
Deserialize : Deserializes the data on the provided stream and reconstitutes the graph of objects。

序列化对象方法
Serialize:Serializes an object, or graph of objects with the given root to the provided stream。

我们可以将对象序列化成两种格式:

BinaryFormatter :将对象序列化为二进制格式
SoapFormatter:将对象序列化为Soap格式

代码:

//要进行序列化的类
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace SerializeDemos
 6{
 7    [Serializable]
 8    public class Car
 9    {
10        private string _Price;
11        private string _Owner;
12        public string Price
13        {
14            get return this._Price; }
15            set this._Price = value; }
16        }

17        public string Owner
18        {
19            get return this._Owner; }
20            set this._Owner = value; }
21        }

22        public Car(string o, string p)
23        {
24            this.Price = p;
25            this.Owner = o;
26        }

27    }

28}

29

//序列化以及反序列化对象
 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel;
 4using System.Data;
 5using System.Drawing;
 6using System.Text;
 7using System.Windows.Forms;
 8using System.IO;
 9using System.Runtime.Serialization.Formatters.Binary;
10using System.Runtime.Serialization.Formatters.Soap;
11using System.Xml.Serialization;
12
13
14namespace SerializeDemos
15{
16
17    public partial class Form1 : Form
18    {
19        public Form1()
20        {
21            InitializeComponent();
22        }

23        private void Form1_Load(object sender, EventArgs e)
24        {
25
26        }

27
28        private void button1_Click(object sender, EventArgs e)
29        {
30            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
31            FileStream fileStream = new FileStream("SerializedCar.bin", FileMode.Create);
32            // 用二进制格式序列化
33            BinaryFormatter binaryFormatter = new BinaryFormatter();
34            binaryFormatter.Serialize(fileStream, car);
35            fileStream.Close();
36            MessageBox.Show("Successful");
37        }

38
39        private void button2_Click(object sender, EventArgs e)
40        {
41            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
42            FileStream fileStream = new FileStream("SerializedCar.Soap", FileMode.Create);
43            // 序列化为Soap
44            SoapFormatter formatter = new SoapFormatter();
45            formatter.Serialize(fileStream, car);
46            fileStream.Close();
47            MessageBox.Show("Successful");
48        }

49
50        private void button3_Click(object sender, EventArgs e)
51        {
52            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
53            FileStream fileStream = new FileStream("SerializedCar.xml", FileMode.Create);
54            // 序列化为xml
55            SoapFormatter formatter = new SoapFormatter();
56            formatter.Serialize(fileStream, car);
57            fileStream.Close();
58            MessageBox.Show("Successful");
59        }

60
61        private void button4_Click(object sender, EventArgs e)
62        {  
63            System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
64            //二进制格式反序列化
65            Stream stream = new FileStream("SerializedCar.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
66            Car mycar = (Car)formatter.Deserialize(stream);
67            stream.Close();
68            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
69        }

70
71        private void button5_Click(object sender, EventArgs e)
72        {
73            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
74            //Soap格式反序列化
75            Stream stream = new FileStream("SerializedCar.Soap", FileMode.Open, FileAccess.Read, FileShare.Read);
76            Car mycar = (Car)formatter.Deserialize(stream);
77            stream.Close();
78            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
79        }

80
81        private void button6_Click(object sender, EventArgs e)
82        {
83            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
84            //Xml格式反序列化
85            Stream stream = new FileStream("SerializedCar.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
86            Car mycar = (Car)formatter.Deserialize(stream);
87            stream.Close();
88            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
89        }

90    }

91}
原文地址:https://www.cnblogs.com/tommyli/p/579575.html