C#序列化与反序列化。
程序员文章站
2022-06-29 08:50:06
序列化介绍: 把对象用一种新的格式来表示。 系列化只序列化数据。 序列化不建议使用自动属性 为什么要序列化: 将一个复杂的对象转换流,方便存储与信息交换。 二进制序列化: 就是将对象变成流的过程,把对象变成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); } } } }
上一篇: 女生经期吃什么好?有什么饮食禁忌?
下一篇: 玉米粒的做法,你会多少呢