序列化和反序列化

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 序列化反序列化
{
    class Program
    {
        static void Main(string[] args)
        {
            //需要将对象的状态保存起来 持久化
            //序列化:将对象的状态持久化到某种设备上(磁盘)
            //要将类标记为Serializable 这个类的对象才能被序列化
            //以二进制的方式进行序列化,而不是文本文档

            //反序列化:将之前序列化的文件还原为对象
            #region[序列化]
            Person p1 = new Person() { Age = 19, Name = "Rose" };
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            using (FileStream fs = new FileStream("se.bin", FileMode.Create))
            {
                bf.Serialize(fs, p1);
            }
            #endregion

            #region【反序列化】
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf2 = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            using (FileStream fs = new FileStream("se.bin", FileMode.Open))
            {
                object obj = bf2.Deserialize(fs);
                Person p3 = obj as Person;
                Console.WriteLine("Age:" + p3.Age.ToString() + "Name:" + p3.Name);
            }
            #endregion




            #region [将一个对象保存到文件文本中,用文件的方式让对象持久化,但是麻烦]
            Person p = new Person();
            if (File.Exists(@"1.txt"))
            {
                string[] strlines = File.ReadAllLines(@"1.txt");
                p.Age = int.Parse(strlines[0]);
                p.Name = strlines[1];
            }
            else
            {
                p.Age = 19;
                p.Name = "Jack";
                File.WriteAllLines(@"1.txt", new string[] { p.Age.ToString(), p.Name });
            }
            #endregion
            Console.Read();
        }

    }
    [Serializable]//表示这个对象可以被序列化,里面的成员如果有其它类,那么这个类也应该需要标记Serializable
    public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
}