好长时间没写博客了,最近一个月一直在做实施没有时间写博客 .... 今天就来接着上次讲的再来说说。 上次咱们讲的序列化是将一个对象序列化为一个XML 文件。今天咱们就来讲讲另外一种,就是将一个对象序列化成一个二进制文件。多的就不说了直接看代码
[Serializable]
class Person
{
private string name;
private string age;
private string sex;
public string Name
{
set { name = value; }
get { return name; }
}
public string Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
set { sex = value; }
get { return sex; }
}
}
这是一个person的类,这个类有3个属性及年龄,姓名,性别。 咱们给这个类添加了一个特性[Serializable] 这个标记 代表这个类可以被序列化,那么要是如果我们不想序列化其中某个属性该怎么办呢? 很简单 在那个属性上面加上 [NonSerialized]特性就可以了。 但看这段代码 什么也不能说明咱接着向下看
static void Main(string[] args)
{
Person p = new Person();
p.Name = "xyl";
p.Sex = "男";
p.Age = "23";
BinaryFormatter Bf = new BinaryFormatter();
using(FileStream fs = new FileStream("Person.dat",FileMode.Create,FileAccess.Write,FileShare.None))
{
Bf.Serialize(fs, p);
}
Console.WriteLine("序列化成功");
using (FileStream fsr = File.OpenRead("Person.dat"))
{
Person p1=(Person) Bf.Deserialize(fsr);
Console.WriteLine("name={0},sex={1};age={2}",p1.Name,p1.Sex,p1.Age);
}
}
这段代码就是将一个对象序列化为一个二进制文件 然后再进行反序列化的代码。首先我们要知道将对象序列化为一个二进制文件有什么优点。这里我们使用了了BinaryFormatter对象 他不仅仅是将对象中的属性字段数据进行持久化,而且也持久化了每个类型的完整限定名和程序集的完整名称。这些数据在跨越.net应用程序边界传递对象时时很理想的。 那么我们来看看这段代码
首先我们实例化了一个person对象 然后给属性进行了赋值,创建了一个BinaryFormatter对象的实例,然后创建一个流对象,参数依次是 path,创建模式,访问文件的方式,如何进程共享。然后使用Serialize()的方法来持久化对象。这时会在 bin文件夹里面生成Person.dat文件 咱们用VS 打开看
然后使用Deserialize进行反序列化 运行控制台后结果如下
这就是一个简单的二进制文件的序列化过程 时间有限今天就说到这里,不过要说到的是 大家在尝试些demo的时候不要忘了引用System.Runtime.Serialization.Formatters.Binary 和 System.IO。 呵呵 就说到这里 如果有讲的不对的地方欢迎大家指正,(*^__^*) 嘻嘻…… 晚安