博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#序列化与反序列化。
阅读量:5231 次
发布时间:2019-06-14

本文共 3658 字,大约阅读时间需要 12 分钟。

序列化介绍:

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

系列化只序列化数据。

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

为什么要序列化:

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

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);                }            }                               }        }

 

转载于:https://www.cnblogs.com/zhangyuhao/p/10540989.html

你可能感兴趣的文章
使用Maven构建Android项目
查看>>
MySQL中exists与in的使用
查看>>
Struts2之Result详解
查看>>
原创:R包制作--windows
查看>>
Python深入:Distutils发布Python模块--转载
查看>>
mysql数据库备份与还原(转)
查看>>
dhroid - eventbus 事件总线
查看>>
Aspose.Cells 读取受保护的Excel
查看>>
为listview的item中的元素设置onclick事件
查看>>
20145221 《Java程序设计》第六周学习总结
查看>>
Nginx禁止直接通过IP地址访问网站
查看>>
css选择器
查看>>
FASTSOCKET
查看>>
Python中__init__方法/__name__系统变量讲解
查看>>
挑战黑客极限:Pwn2Own 2015成史上“最难”黑客大赛
查看>>
javascript 的继承
查看>>
判断是否是微信浏览器的函数
查看>>
图像处理04
查看>>
SSH在MyEclipse 8.5下整合详细步骤 (Struts2.1+Spring3.0+Hibernate3.3)
查看>>
【生病要吃对水果】
查看>>