序列化介紹: 把對象用一種新的格式來表示。 系列化只序列化數據。 序列化不建議使用自動屬性 為什麼要序列化: 將一個複雜的對象轉換流,方便存儲與信息交換。 二進位序列化: 就是將對象變成流的過程,把對象變成byte[ ]。 反序列化: 練習:添加對象到array list中,進行序列化和反序列化。 ...
序列化介紹:
把對象用一種新的格式來表示。
系列化只序列化數據。
序列化不建議使用自動屬性
為什麼要序列化:
將一個複雜的對象轉換流,方便存儲與信息交換。
class Program { static void Main(string[] args) { Person person = new Person(); person.Name = "張三"; person.Age = 18; // json 序列化 變成字元串 JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); string msg = javaScriptSerializer.Serialize(person); Console.WriteLine(msg); } } class Person { public string Name { get; set; } public int Age { get; set; } }
二進位序列化:
就是將對象變成流的過程,把對象變成byte[ ]。
class Program { static void Main(string[] args) { Person person = new Person(); person.Name = "張三"; person.Age = 18; // 二進位序列化註意點: //1、被序列化對象類型必須標記為可序列化 //2、被序列化的所有父類也必須標記為可序列化 //3、被序列化的對象的類型中欄位的類型也要標記 //二進位序列化步驟: //1、創建序列化器 BinaryFormatter bf = new BinaryFormatter(); // 1.1 創建一個文件流。 using(FileStream fsWrite =new FileStream("person.bin", FileMode.Create)) { //2、開始執行序列化。 bf.Serialize(fsWrite, person); } Console.WriteLine("序列化完畢"); } } [Serializable] class Person:Animal { public string Name { get; set; } public int Age { get; set; } public Car BenChi { get; set; } } [Serializable] public class Animal { public void Eat() { Console.WriteLine("eat food..."); } } [Serializable] public class Car { }
反序列化:
class Program { static void Main(string[] args) { //二進位反序列化註意的問題: //1、必須獲取被系列化的對象的類型所在的程式集。因為它要根據序列化文件還原該對象,而序列化文件中 //只包含數據信息,而不包含其類型的相關信息、方法相關信息等,這些信息在對象序列文件中都沒有。 //步驟: //1、創建序列化器。 BinaryFormatter bf = new BinaryFormatter(); //1.1 創建讀取文件的文件流。 using(FileStream fsRead=new FileStream("person.bin", FileMode.Open)) { //2、執行反序列化。 object obj = bf.Deserialize(fsRead); Person person = (Person)obj; Console.WriteLine(person.Name); } Console.WriteLine("ok"); } } [Serializable] class Person { public string Name { get; set; } public int Age { get; set; } }
練習:添加對象到array list中,進行序列化和反序列化。
序列化:
class Program { static void Main(string[] args) { ArrayList arrayList = new ArrayList(); arrayList.Add("張三"); arrayList.Add(18); //創建序列化容器 BinaryFormatter bf = new BinaryFormatter(); //創建文件流 using(FileStream fs=new FileStream("txt.txt", FileMode.Create)) { //執行序列化 bf.Serialize(fs, arrayList); } Console.WriteLine("序列化完畢"); } }
反序列化:
class Program { static void Main(string[] args) { //創建序列化容器 BinaryFormatter bf = new BinaryFormatter(); //創建讀取的文件流 using(FileStream fs=new FileStream("txt.txt", FileMode.Open)) { //執行反序列化 object obj= bf.Deserialize(fs); ArrayList arrayList = (ArrayList)obj; foreach (var item in arrayList) { Console.WriteLine(item); } } } }