C#中怎样实现序列化和反序列化
1个回答
展开全部
我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的
因为我们如果想要将一个对象持久化到文件中 如果我们使用IO流文件流操作的话可能就没办法实现了,但是我们用序列化的话就可以轻而易举的实现,并且当我们回拿到数据的
时候,我们拿到的也是一个对象,但是它保存到文件中是二进制文件
具体实现步骤如下
首先我们有一个实体对象 并且这个类是可支持序列化操作的 也就是挂载有[Serializable]标记
//说明该类可以被序列化
[Serializable]
public class Peoson
{
private int age;
private string name;
public int Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public Peoson() { }
public Peoson(string name,int age) {
this.age = age;
this.name = name;
}
public void say() {
Console.WriteLine("名字:{0},年龄{1}",name,age);
}
}
然后我们在Main函数中准备一个集合,并将上面创建的类作为集合的属性,为其添加数据,直接对该集合进行序列化操作和反序列化操作
static void Main(string[] args)
{
//准备集合并为其添加数据
List<Peoson> list = new List<Peoson>();
Peoson p1 = new Peoson("小黄", 18);
Peoson p2 = new Peoson("小白", 28);
Peoson p3 = new Peoson("小青", 15);
list.Add(p1);
list.Add(p2);
list.Add(p3);
//序列化
SerializeMethod(list);
//反序列化
List<Peoson> list2= ReserializeMethod();//调用反序列化的方法 其方法返回值是一个List集合
foreach (Peoson item in list2)//遍历集合中的元素
{
item.say();
}
Console.ReadKey();
}
//序列化操作
public static void SerializeMethod(List<Peoson> list) {
using (FileStream fs=new FileStream("序列化.btn",FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,list);
Console.WriteLine("序列化成功!");
}
}
//反序列化操作
public static List<Peoson> ReserializeMethod()
{
using(FileStream fs=new FileStream("序列化.btn",FileMode.Open)){
BinaryFormatter bf = new BinaryFormatter();
List<Peoson> list = (List<Peoson>)bf.Deserialize(fs);
return list;
}
}
}
以上我们就对集合数据完成了序列化和反序列化的操作了
因为我们如果想要将一个对象持久化到文件中 如果我们使用IO流文件流操作的话可能就没办法实现了,但是我们用序列化的话就可以轻而易举的实现,并且当我们回拿到数据的
时候,我们拿到的也是一个对象,但是它保存到文件中是二进制文件
具体实现步骤如下
首先我们有一个实体对象 并且这个类是可支持序列化操作的 也就是挂载有[Serializable]标记
//说明该类可以被序列化
[Serializable]
public class Peoson
{
private int age;
private string name;
public int Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public Peoson() { }
public Peoson(string name,int age) {
this.age = age;
this.name = name;
}
public void say() {
Console.WriteLine("名字:{0},年龄{1}",name,age);
}
}
然后我们在Main函数中准备一个集合,并将上面创建的类作为集合的属性,为其添加数据,直接对该集合进行序列化操作和反序列化操作
static void Main(string[] args)
{
//准备集合并为其添加数据
List<Peoson> list = new List<Peoson>();
Peoson p1 = new Peoson("小黄", 18);
Peoson p2 = new Peoson("小白", 28);
Peoson p3 = new Peoson("小青", 15);
list.Add(p1);
list.Add(p2);
list.Add(p3);
//序列化
SerializeMethod(list);
//反序列化
List<Peoson> list2= ReserializeMethod();//调用反序列化的方法 其方法返回值是一个List集合
foreach (Peoson item in list2)//遍历集合中的元素
{
item.say();
}
Console.ReadKey();
}
//序列化操作
public static void SerializeMethod(List<Peoson> list) {
using (FileStream fs=new FileStream("序列化.btn",FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,list);
Console.WriteLine("序列化成功!");
}
}
//反序列化操作
public static List<Peoson> ReserializeMethod()
{
using(FileStream fs=new FileStream("序列化.btn",FileMode.Open)){
BinaryFormatter bf = new BinaryFormatter();
List<Peoson> list = (List<Peoson>)bf.Deserialize(fs);
return list;
}
}
}
以上我们就对集合数据完成了序列化和反序列化的操作了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询