C# 类的序列化和反序列化

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

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

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

[Serializable] 

 代码如下 复制代码
public class People  {    
public string Name {
get; set;
}     
public int Age { get; set; }
 }

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

//序列化 

 代码如下 复制代码
FileStream fs = new FileStream(@"D:ProgramCSharpNGramTestNGramTestserializePeople.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:ProgramCSharpNGramTestNGramTestserializePeople.dat", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
People p = bf.Deserialize(fs) as People;

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

 代码如下 复制代码

//序列化List  FileStream fs = new FileStream(@"D:ProgramCSharpNGramTestNGramTestserializePeople.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:ProgramCSharpNGramTestNGramTestserializePeople.dat", FileMode.Open);  BinaryFormatter bf = new BinaryFormatter();
List<People> ps = bf.Deserialize(fs) as List<People>;

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

时间: 2024-09-20 07:30:50

C# 类的序列化和反序列化的相关文章

.NET对象的XML序列化和反序列化

 序列化的概念 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串"2"表示.如果有个对象,叫做connter,当前值为2,那么可以序列化成"2",反向的,也可以从"2"得到值为2的计数器实例.这样,关机时序列化它,开机时反序列化它,每次开机都是延续的.不会都是从头开始. 序列化概念的提出和实现,可以使我们的应用程序的设置信息保存和读取更加方便

C# 实体类序列化与反序列化一 (XmlSerializer)

/// <summary> /// 实体类序列化的反序列化的类 /// </summary> /// <typeparam name="T"></typeparam> public abstract class EntityClassXmlSerializer<T> { /// <summary> /// 实体类序列化成xml string /// </summary> /// <param na

C#实现XML与实体类之间相互转换的方法(序列化与反序列化)_C#教程

本文实例讲述了C#实现XML与实体类之间相互转换的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Xml; using System.Xml.Serialization; /// <summary> /// Xml序列化与反序列化 //

使用jsoncpp封装的Json序列化和反序列化的工具类

C++序列化和反序列化json需要写的代码实在是太多了,太过于臃肿了.相比较其他的语言,如:js,php等.如果在其他语言里面用过json,再在c++里面来使用,那种感觉会是非常无奈的,而且抗拒的.怎么说呢,勉强的还是能用的吧.凑合用吧. JsonSerializer.h /********************************************************************** * Copyright (C) 2015 - tx7do - All Rights

java笔记九:对象序列化与反序列化

在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失.如何将这些对象保存起来以便下一次 再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫 做反序列化. 基本数据类型的包装类和所有容器类都可以被序列化.用户自定义的类默认是不可以被序列化的.如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口. 下面看一个Demo:

ASP.NET中JSON的序列化和反序列化

导读:JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号'{

通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法

对象|集合|数据 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法 我们在平时使用数据库的时候,经常会碰到一个问题,就是不希望数据实体对象插入数据库中, 却有想持久化的时候,那么就可以用序列化成 XML字符串,来保存到其他地方,由于生成的是字符串,所以可以保存到任意我们想保存的地方.比如 asp.net的ViewState,cookie,cache等. 首先,我们定义一个数据实体类.     class Entity    {        public Entity()     

Asp.Net Forums中对.Net中序列化和反序列化的应用

asp.net 在Forums中,有些内容是不固定的,例如用户资料,除了一些基本资料,可能还要有一些其他资料信息,例如MSN.个人主页.签名档等,一般对于这样的都是每一个属性对应于数据库中的一个字段.但是如果以后我们因为需要增加一些属性,例如QQ号.Blog地址等,如果还是用这种增加数据表字段的方法,那么将会频繁的修改数据库表结构.存储过程.数据库访问的程序. 或许您也遇到过类似问题,看Forums中是怎么借用.Net的序列化和反序列化来解决的:例如我需要在用户资料里面增加QQ号这个属性,那么我

C#实现对象的Xml格式序列化及反序列化

xml|对象   要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name;}set{name=value;}}public string Sex;public int Age=31;public Course[] Courses; public Person(){}public Person(string Name){name=Name;Sex="男&q