序列化又稱串行化,是.NET運行時環(huán)境用來支持用戶定義類型的流化的機制。
其目的是以某種存儲形式使自定義對象持久化(Unity-Inspector),或者將這種對象從一個地方傳輸?shù)搅硪粋€地方(網(wǎng)絡傳輸)。
.NET框架提供了兩種串行化的方式:
- BinaryFormatter(提供了一個簡單的二進制數(shù)據(jù)流以及某些附加的類型信息)
- XmlSerializer(將數(shù)據(jù)流格式化為XML存儲)
標簽
- 序列化 [Serializable]
- 反序列化 [NonSerialized] [XmlIgnore]
定義一個Person結構
[Serializable]
public class Person
{
public string name;
public int age;
public override string ToString()
{
return "name:" + name + " age:" + age;
}
}
XmlSerializer
var person = new Person();
person.name = "小豬";
person.age = 20;
print(person.ToString());
using (var fs = new FileStream("person.bin", FileMode.Create)) {
var xs = new XmlSerializer(typeof(Person));
xs.Serialize(fs, person);
}
Person p;
using(var fs = new FileStream("person.bin", FileMode.Open)) {
var xs = new XmlSerializer(typeof(Person));
p = xs.Deserialize(fs) as Person;
}
print(p.ToString());
BinaryFormatter
var person = new Person();
person.name = "小豬";
person.age = 20;
print(person.ToString());
using (var fs = new FileStream("person2.bin", FileMode.Create)) {
var bf = new BinaryFormatter();
bf.Serialize(fs, person);
}
Person p;
using (var fs = new FileStream("person2.bin", FileMode.Open)) {
var bf = new BinaryFormatter();
p = bf.Deserialize(fs) as Person;
}
print(p.ToString());