使用二进制序列化,必须为每一个要序列化的的类和其关联的类加上[Serializable]特性
来源:互联网 发布:网络弱电布线工程报价 编辑:程序博客网 时间:2024/06/05 07:19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializeBin
{
//(1)二进制序列化与反序列化的程序示例
[Serializable] //必须添加序列化特性
public class Person
{
private string Name;//姓名
private bool Sex;//性别,是否是男
public Person(string name, bool sex)
{
this.Name = name;
this.Sex = sex;
}
public override string ToString()
{
return "姓名:" + this.Name + "\t性别:" + (this.Sex ? "男" : "女");
}
}
[Serializable] //必须添加序列化特性
public class Programmer : Person
{
private string Language;//编程语言
public Programmer(string name, bool sex, string language) : base(name, sex)
{
this.Language = language;
}
public override string ToString()
{
return base.ToString() + "\t编程语言:" + this.Language;
}
}
class Program
{
static void Main(string[] args)
{
//创建Programmer列表,并添加对象
List<Programmer> list = new List<Programmer>();
list.Add(new Programmer("李志伟", true, "C#"));
list.Add(new Programmer("Coder2", false, "C++"));
list.Add(new Programmer("Coder3", true, "Java"));
//使用二进制序列化对象
string fileName = @"Programmers.dat";//文件名称与路径
Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
binFormat.Serialize(fStream, list);
fStream.Close();
//使用二进制反序列化对象
Console.WriteLine("使用二进制反序列化对象 ");
fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
list.Clear();//清空列表
fStream.Position = 0;//重置流位置
list = (List<Programmer>)binFormat.Deserialize(fStream);//反序列化对象
foreach (Programmer p in list)
{
Console.WriteLine(p);
}
Console.Read();
}
}
}
使用二进制序列化,必须为每一个要序列化的的类和其关联的类加上[Serializable]特性,对类中不需要序列化的成员可以使用[NonSerialized]特性。
二进制序列化对象时,能序列化类的所有成员(包括私有的),且不需要类有无参数的构造方法。
使用二进制格式序列化时,它不仅是将对象的字段数据进行持久化,也持久化每个类型的完全限定名称和定义程序集的完整名称(包括包称、版本、公钥标记、区域性),这些数据使得在进行二进制格式反序列化时亦会进行类型检查。所以反序列化时的运行环境要与序列化时的运行环境要相同,否者可能会无法反序列化成功。
- 使用二进制序列化,必须为每一个要序列化的的类和其关联的类加上[Serializable]特性
- 关于类的序列化[Serializable]
- C# 类的序列化[Serializable]
- C# 类的序列化[Serializable]
- C# 类的序列化[Serializable]
- C# 类的序列化[Serializable]
- 未标记为可序列化 什么意思呢? 类的序列化[Serializable]
- C#序列化(Serializable)的使用
- java序列化接口Serializable的使用
- Serializable序列化接口的使用
- 序列化Serializable和Parcelable的区别
- 序列化Serializable的理解
- java的serializable序列化
- .NET提供的二进制序列化和xml序列化
- Boost文本序列化和二进制序列化的效率
- 序列化Serializable和Parcelable的理解和区别
- 序列化Serializable和Parcelable的理解和区别
- 序列化Serializable和Parcelable的理解和区别
- 复习:方差分析
- 数论 -1 gcd之辗转相除法
- OpenStack学习笔记
- Android中SoundPool播放 本地小音频
- 【HDU5877】Weak Pair(线段树+dfs+离散化)
- 使用二进制序列化,必须为每一个要序列化的的类和其关联的类加上[Serializable]特性
- this
- 三维空间的投影变换(2)——投影校正
- 数据结构各种排序方法
- YII 简单邮件发送
- Springmvc开发详细步骤
- 巧用alias命令 - 简化开发工作中的重复劳动
- github上优秀项目
- 解决 服务器vsftpd安装完成后,用winscp不能上传和下载文件的问题