有时候我们希望把类的实例保存下来,以便以后的时候用。一个直观的方法就是StreamWriter把类写成一行,用\t分隔开每个属性,然后用StreamReader读出来。

但是这样太麻烦,代码行数较多,而且必须事先知道属性在行中的对应位置。这时候如果采用类序列化的方式保存就使得代码很简单:

假如你有一个类,在它的上面加上[Serializable]属性就可以了,表示这个类是可以序列化的

[Serializable]
public class People
{
public string Name { get; set; }
public int Age { get; set; }
}

然后采用如下代码将类的实例序列化到文件中

//序列化
FileStream fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Create);
People p = new People() { Name = "Haocheng Wu", Age = 24 }; BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, p);
fs.Close();

这样就能够上面的那个文件就保存了这个类的实例,如果想要读出来,就可以用

//反序列化
fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
People p = bf.Deserialize(fs) as People;

运用同样的方法,也可以把一个类的List完全序列化到文件中

//序列化List
FileStream fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter(); List<People> ps = new List<People>();
ps.Add(new People() { Name = "Haocheng Wu", Age = 24 });
ps.Add(new People() { Name = "James Wu", Age = 23 }); bf.Serialize(fs, ps);
fs.Close();

读出来的方法也是一样的:

//反序列化List
fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
List<People> ps = bf.Deserialize(fs) as List<People>;

序列化可以做很多事情,这里仅仅举了两个简单的例子,很容易可以举一反三.

路径也可以使用Server.MapPath("~/.........../serializePeople.dat");

GOOD LUCK

C# 把类实例保存到文件里(类的序列化和反序列化)的更多相关文章

  1. Android输出日志Log类并保存到文件中

    android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e().根据首字母分别对应VERBOSE,DEBUG,INFO,W ...

  2. Struts2 源码分析——Result类实例

    本章简言 上一章笔者讲到关于DefaultActionInvocation类执行action的相关知识.我们清楚的知道在执行action类实例之后会相关处理返回的结果.而这章笔者将对处理结果相关的内容 ...

  3. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  4. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  5. File类与常用IO流第十章——序列化流

    第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...

  6. Log 日志工具类 保存到文件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. python之元编程(元类实例)

    本实例是元类实例,功能是记录该的子类的类名,并以树状结构展示子类的类名. RegisterClasses继承自type,提供的功能是在__init__接口,为类创建了childrens的集合,并类名保 ...

  8. C# Oracle数据库操作类实例详解

    本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...

  9. php将session保存到数据库的类实例(php版本需要大于5.4)

    这里实现了一个把session存储到数据库的类,包括数据表的创建.类的使用.php的配置. 可以更好地进行用户控制管理. 做项目的时候,有一个需求,是要实现禁止一个账号两处登录.同时要统计当前在线用户 ...

随机推荐

  1. 国内版Office365实现MFA的方案(未完)

    现在二十一世纪互联版也可以实现了MFA,现在也就是2017年3月份,支持了PC,但是对移动端应用还是不支持的,请了解. 具体方法如下: 登录国内版Office365(事例为高级商业版 https:// ...

  2. ubuntu ssh配置

    Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over ...

  3. LeetCode - 442. Find All Duplicates in an Array - 几种不同思路 - (C++)

    题目 题目链接 Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ...

  4. POJ 3308 Paratroopers(最大流最小割の最小点权覆盖)

    Description It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the ...

  5. POJ 1873 The Fortified Forest(枚举+凸包)

    Description Once upon a time, in a faraway land, there lived a king. This king owned a small collect ...

  6. php中array_map和array_walk的使用对比

    一.array_map() 1.array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,若函数作用后无返回值,则对应的新值数组中为空. 2.回调 ...

  7. C++读取文件统计单词个数及频率

    1.Github链接 GitHub链接地址https://github.com/Zzwenm/PersonProject-C2 2.PSP表格 PSP2.1 Personal Software Pro ...

  8. 如何重新安装Orchard CMS?

    Orchard CMS安装后,配置文件和数据库保存在App_Data目录中.这个目录是受保护的,是不能通过网址访问到的. 如果要完全重装你的站点,你可以删除此目录中的所有文件,但是最好先备份!删除后重 ...

  9. 总结 java 学习

    想着想把以前学的java学习笔记整理下发上来,慢慢整理吧.

  10. linux路由表的配置

    linux路由表的配置 一.原理说明 1.路由表(table)从0到255进行编号,每个编号可以对应一个别名,编号和别名的对应关系在linux下放在/etc/iproute2/rt_tables这个文 ...