VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之C#序列化与反序列化

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

序列化介绍:

把对象用一种新的格式来表示。

系列化只序列化数据。

序列化不建议使用自动属性

为什么要序列化:

将一个复杂的对象转换流,方便存储与信息交换。

复制代码
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);
                }
            }
           
            
        }    
    }

相关教程