序列化- 使用BinaryFormatter进行序列化
使用BinaryFormatter进行序列化
在下面这个例子中我们建立一个自定义类型(Insect)集合,使用BinaryFormatter将它们写到二进制文件,然后再将他们读回。
注:以下程序需要导入一些命名空间:
using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class Insect
{
private string name;
[NonSerialized]
private int id;
public Insect(string name, int id)
{
this.name = name;
this.id= id;
}
public override string ToString()
{
return String.Format("{0}:{1}", name, id);
}
}
我们使用一个标准属性将整个Insect类声明为可序列化的。但是因为一个字段被声明为不可序列化,所以这个字段不能被持久化。
我们先做一个试验,我们只实例化一个Insect对象,创建一个文件,然后使用BinaryFormatter对象和Serialize方法写出这个Insect对象:
{
public static void Main(string[] args)
{
Insect i = new Insect("Meadow Brown", 12);
Stream sw = File.Create("Insects.bin");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(sw, i);
sw.Close();
}
}
如果在Visual Studio打开Insect.bin文件就会看到以下内容:
FBinaryFormatter, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Insect name Meadow Brown(由于我没有截图软件,所以这只是部分内容)
我们可以注意到并没有id字段,因为它没有被序列化。
现在,我们增加几个Insect对象。
box.Add(new Insect("Marsh Fritillary", 34));
box.Add(new Insect("Speckled Wood", 56));
box.Add(new Insect("Milkweed", 78));
sw = File.Open("Insects.bin", FileMode.Append);
bf.Serialize(sw, box);
sw.Close();
Stream sr = File.OpenRead("Insects.bin");
Insect j = (Insect)bf.Deserialize(sr);
Console.WriteLine(j);
ArrayList bag = (ArrayList)bf.Deserialize(sr);
sr.Close();
foreach(Insect k in bag)
{
Console.WriteLine(k);
}
下面是这个程序的输出:
Meadow Brown:0
Marsh Fritillary:0
Speckled Wood:0
Milkweed:0
id值是0,其原因是很明显的(它在foreach循环中构造Insect的期间被初始化为0)。
注意,我们非常小心地先读回一个Insect对象 - 在读回集合之前已经被序列化到文件的对象。
另外,在我们使用Deserialize时,必须对返回的对象进行类型转换,因为这个方法返回一个一般性的对象。
在后面添加的集合中有三个Insect的数据,这节省了一些开销,因为只需要为第一列的Insect记录Insect类的类型信息。
另外一个有意思的地方是,序列化机制显然能够读写列中的私有字段。
序列化- 使用BinaryFormatter进行序列化的更多相关文章
- .NET 二进制序列化器,SOAP序列化器,XML序列化器
这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...
- 序列化战争:主流序列化框架Benchmark
序列化战争:主流序列化框架Benchmark GitHub上有这样一个关于序列化的Benchmark,被好多文章引用.但这个项目考虑到完整性,代码有些复杂.为了个人学习,自己实现了个简单的Benchm ...
- 字定义JSON序列化支持datetime格式序列化
字定义JSON序列化支持datetime格式序列化 由于json.dumps无法处理datetime日期,所以可以通过自定义处理器来做扩展,如: import json from datetime i ...
- Atitit php序列化 php的serialize序列化和json序列化
Atitit php序列化 php的serialize序列化和json序列化 PHP 对不同类型的数据用不同的字母进行标示,Yahoo 开发网站提供的Using Serialized PHP with ...
- java序列化和反序列化及序列化方式
平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即 存储对象中的状态 ...
- 从LocalDateTime序列化探讨全局一致性序列化
日拱一卒无有尽,功不唐捐终入海. 楔子 前两周发了三篇SpringSecurity和一篇征文,这周打算写点简单有用易上手的文章,换换脑子,休息一下. 今天要写的是这篇:从LocalDateTime序列 ...
- (转+整理)C# BinaryFormatter进行序列化与反序列化
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形式使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种种串行化的方式:1. ...
- [MVC_Json序列化]MVC之Json序列化循环引用
在做MVC项目时,难免会遇到Json序列化循环引用的问题,大致错误如下 错误1:序列化类型为“...”的对象时检测到循环引用. 错误2:Self referencing loop detected f ...
随机推荐
- h.264 去块滤波
块效应及其产生原因 我们在观看视频的时候,在运动剧烈的场景常能观察到图像出现小方块,小方块在边界处呈现不连续的效果(如下图),这种现象被称为块效应(blocking artifact). 首先我们需要 ...
- 修改Delphi工具控件的默认字体
修改Delphi工具控件的默认字体: 注册表: Delphi 6: HKEY_CURRENT_USER\Software\Borland\Delphi\6.0Delphi 7: HKEY_ ...
- Android开源项目发现--- 工具类文件处理篇(持续更新)
1.ZIP java压缩和解压库 项目地址:https://github.com/zeroturnaround/zt-zip 文档介绍:https://github.com/zeroturnaroun ...
- LeetCode解题报告:Insertion Sort List
Insertion Sort List Sort a linked list using insertion sort. leetcode subject思路:标准的插入排序.考察一下链表的操作. 对 ...
- 创建range分区
drop table T_PM_ACCT_DTL_AF_TEST; create table T_PM_ACCT_DTL_AF_TEST ( DATA_DATE date, AC ...
- Coach(并查集)
Description A programming coach has n students to teach. We know that n is divisible by 3. Let's ass ...
- Android应用连接代理服务器状况监测解决
最近项目里面有这样一个需求,由于项目涉密需要连接VPN通过网址映射去登录内部服务器,而且要通知客户vpn的连接状态.网上有许多类似的连接VPN的解决方案,我也尝试了很多种,下面先列出一种比较靠谱的方式 ...
- Unity Chan Advanced
1. 8X MSAA 2. SMAA 3. ViewSpace Outline 4. Unity Chan Skin 5. Shift Toon Lighting 6. DOF 7. Bloom
- [转载]jQuery UI 使用
最近项目中使用了一些插件来做页面,这里把jQuery UI的使用分享出来,希望 对新手有帮助.文章结尾附源码下载. 1 jQuery UI 2 为我所用 2.1 Tabs 2. ...
- php 文本框里面显示数据库调出来的资料
php 文本框里面显示数据库调出来的资料,,,在里面我标注了,,那个地方为什么是!=才能显示正确的数据库资料啊?我理解的是对比正确输出数据库内容的.大师貌似不知道为什么就写错了 <html> ...