[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。 呵呵 就说到这里 如果有讲的不对的地方欢迎大家指正,(*^__^*) 嘻嘻…… 晚安
最新评论