概念
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。
序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。
序列化就是为了保持对象的持久化;对象序列化只能针对对象的字段进行序列化。
序列化期间,对象将其当前状态写入临时或持久性存储区,以后可以通过从存储区中读取或反序列化对象的状态重新创建该对象。
注意:不是所有对象都能序列化 只有可序列化的对象才能序列化,在类声明上加[Serializable]。
二进制序列化步骤
1、创建序列化器
语法格式:BinaryFormatter bf = new BinaryFormatter();
2、创建文件流
FileStream fs = new FileStream(“xx.bin”,fileMode.creat);
3、开始执行序列化
bf.Serialize(文件流对象,执行序列化的对象());
反序列化步骤:
1、创建序列化器
2、创建文件的文件流 (读取的open)
3、执行反序列化
代码示例:
XML
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
namespace Test_CSharp
{
class Program
{
static void Main(string[] args)
{
List<Person> list = new List<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1.Name = "张三";
p1.Age = 20;
list.Add(p1);
p2.Name = "李四";
p2.Age = 25;
list.Add(p2);
p3.Name = "王五";
p3.Age = 30;
list.Add(p3);
//创建一个序列化器
XmlSerializer x = new XmlSerializer(typeof(List<Person>));
using (FileStream fs = new FileStream("Person.xml", FileMode.Create))
{
//执行序列化
x.Serialize(fs, list);
}
Console.WriteLine("ok");
//反序列化
using (FileStream ff = new FileStream("Person.xml", FileMode.Open))
{
object o = x.Deserialize(ff);
List<Person> li = o as List<Person>;
foreach (Person item in li)
{
Console.WriteLine("名字:{0} 年龄:{1}", item.Name, item.Age);
}
Console.ReadKey();
}
}
}
[Serializable]
public class Person
{
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
}
}
--->
ok
名字:张三 年龄:20
名字:李四 年龄:25
名字:王五 年龄:30
二进制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace Test_CSharp
{
class Program
{
static void Main(string[] args)
{
List<Song> s = new List<Song>();
Song s1 = new Song();
s1.Sname = "光辉岁月";
s1.Pname = "beyond";
s.Add(s1);
Song s2 = new Song();
s2.Sname = "冰雨";
s2.Pname = "刘德华";
s.Add(s2);
Song s3 = new Song();
s3.Sname = "一次就好";
s3.Pname = "杨宗纬";
s.Add(s3);
//创建一个序列化器
BinaryFormatter bi = new BinaryFormatter();
using (FileStream fi = new FileStream("Song.txt", FileMode.Create))
{
//执行序列化
bi.Serialize(fi, s);
}
//反序列化
using (FileStream ff = new FileStream("Song.txt", FileMode.Open))
{
object o = bi.Deserialize(ff);
List<Song> li = o as List<Song>;
foreach (Song item in li)
{
Console.WriteLine("名字:{0} 歌曲:{1}", item.Pname, item.Sname);
}
Console.ReadKey();
}
}
}
[Serializable]
public class Song
{
string _sname;
public string Sname
{
get { return _sname; }
set { _sname = value; }
}
string _pname;
public string Pname
{
get { return _pname; }
set { _pname = value; }
}
}
}
--->
名字:beyond 歌曲:光辉岁月
名字:刘德华 歌曲:冰雨
名字:杨宗纬 歌曲:一次就好