.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格式
代码:
//要进行序列化的类//序列化以及反序列化对象
using
System;2
using
System.Collections.Generic;3
using
System.Text;4

5
namespace
SerializeDemos6

{7
[Serializable]8
public class Car9

{10
private string _Price;11
private string _Owner;12
public string Price13

{14

get
{ return this._Price; }15

set
{ this._Price = value; }16
}17
public string Owner18

{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
using
System;2
using
System.Collections.Generic;3
using
System.ComponentModel;4
using
System.Data;5
using
System.Drawing;6
using
System.Text;7
using
System.Windows.Forms;8
using
System.IO;9
using
System.Runtime.Serialization.Formatters.Binary;10
using
System.Runtime.Serialization.Formatters.Soap;11
using
System.Xml.Serialization;12

13

14
namespace
SerializeDemos15

{16

17
public partial class Form1 : Form18

{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
// 序列化为Soap44
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
// 序列化为xml55
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
}
104

被折叠的 条评论
为什么被折叠?



