概述
C# 序列化与反序列化意义详解
总结:
①序列化基本是指把一个对象保存到文件或流中,比如可以把文件序列化以保存到Xml中,或一个磁盘文件中
②序列化以某种存储形式使自定义对象持久化;
③将对象从一个地方传递到另一个地方。
④将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。
⑥序列是指将对象的实例状态存储到存储媒体的过程。
在此过程中,先将对象的公共字段以及类的名称(包括类的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
⑦用处非常大,用于数据传输,对象存贮等。
这些是我通过网上多方参考再结合自己的经验总结的。还是看实例:
using System;
using System.Collections.Generic;
using System.IO; //文件操作相关
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary; //包含 BinaryFormatter类,该类可用于以二进制格式将对象序列化和反序列化。
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Program P = new Program();
P.SerializeStudent();
P.DeSerializeStudent();
}
public void SerializeStudent()
{
Student c = new Student();
c.Id = 0;
c.Name = "liang";
c.Sex = "女";
c.Qq = "676596050";
c.Homepage = "http://www.zrrj.net";
//创建二进制文件temp.dat
FileStream fileStream = new FileStream("c:\temp.dat", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
//将Student实例对象序列化给fileStream流:其含义是这时候的Student对象已经存储到temp.dat文件中
b.Serialize(fileStream, c);
fileStream.Flush();
fileStream.Close();
fileStream.Dispose();
}
public void DeSerializeStudent()
{
Student c = new Student();
//下面三个属性输出时没有更改,因为反序列化实例化了一个新的Student
c.Id = 1;
c.Qq = "676596051";
c.Homepage = "http://www.zrrj.net";
FileStream fileStream = new FileStream("c:\temp.dat", FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
BinaryFormatter b = new BinaryFormatter();
//将temp.dat 的文件流反序列化为Student
c = b.Deserialize(fileStream) as Student;
c.Name = "liang";
c.Sex = "男";
Console.Write("编号:" + c.Id + "n姓名:" + c.Name + "n性别:" + c.Sex + "nQQ:" + c.Qq + "n主页:" + c.Homepage);
Console.ReadLine();
//释放文件流资源
fileStream.Flush();
fileStream.Close();
fileStream.Dispose();
}
/// <summary>
/// 创建6个可读可写的属性
/// </summary>
[Serializable]
public class Student
{
//编号
private int id;
//姓名
private string name;
//性别
private string sex;
//QQ
private string qq;
//主页
private string homepage;
public int Id
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public string Qq
{
get { return qq; }
set { qq = value; }
}
public string Homepage
{
get { return homepage; }
set { homepage = value; }
}
}
}
}
下面是序列化Hashtable的示例代码:
using System;
using System.Collections; //HashTable 所在的命名空间
using System.IO; //FileStream所在的命名空间
using System.Runtime.Serialization.Formatters.Binary; //序列化反序列化进制转换空间
namespace Same1
{
class Program
{
static void Main(string[] args)
{
Serialize();
Deserialize();
Console.ReadLine();
}
static void Serialize()
{
//创建一个包含值的HashTable最后将被序列化
Hashtable addresses = new Hashtable();
addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");
//为了将HashTable序列化,需要创建一个File Stream
FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
// 利用二进制格式化将 Hashtable序列化至文件流中
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(fs, addresses);
}
catch (System.Runtime.Serialization.SerializationException e)
{
Console.WriteLine("序列化失败原因是: " + e.Message);
throw;
}
finally
{
fs.Flush();
fs.Close();
fs.Dispose();
}
}
static void Deserialize()
{
// 声明一个HashTable
Hashtable addresses = null;
// 打开你需要反序列化的文件,并以流的形式输出
FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
try
{
BinaryFormatter formatter = new BinaryFormatter();
//反序列化文件流为HashTable
addresses = (Hashtable)formatter.Deserialize(fs);
}
catch (System.Runtime.Serialization.SerializationException e)
{
Console.WriteLine("反序列化失败,原因是: " + e.Message);
throw;
}
finally
{
fs.Flush();
fs.Close();
fs.Dispose();
}
//为了验证反序列化是否成功,将HashTale中的键、值对输出
foreach (DictionaryEntry de in addresses)
{
Console.WriteLine("{0} 的出生地是: {1}.", de.Key, de.Value);
}
}
}
}
参考链接(转载至):https://www.cnblogs.com/liangdejiu/archive/2012/07/14/2591437.html
最后
以上就是默默方盒为你收集整理的C#利用BinaryFormatter序列化对象的用法的全部内容,希望文章能够帮你解决C#利用BinaryFormatter序列化对象的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复