对象的序列化与反序列化
对象的序列化
.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格式
代码:
//要进行序列化的类
//序列化以及反序列化对象
对象的序列化主要的目的是将对象持久化,经过持久化的对象可以从一个地方传输到另一个地方。
在.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
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}
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}