博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#基础之序列化(2)

Posted on 2011-03-27 21:05  Mr.X  阅读(1076)  评论(0编辑  收藏  举报

好长时间没写博客了,最近一个月一直在做实施没有时间写博客 ....  今天就来接着上次讲的再来说说。 上次咱们讲的序列化是将一个对象序列化为一个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。 呵呵 就说到这里 如果有讲的不对的地方欢迎大家指正,(*^__^*) 嘻嘻……  晚安