C# 序列化和反序列化
Posted 嘻嘻嘻嘻嘻嘻嘻嘻哈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 序列化和反序列化相关的知识,希望对你有一定的参考价值。
(一)序列化
1、对象序列化标识
//在序列化前需要先将类标记
[Serializable]//对象可序列化标记
class Student
public string Name get; set;
public string Gender get; set;
public int Age get; set;
public DateTime Birtheday get; set;
2、引入两个命名空间
using System.IO;
using System.Runtime.Serialization.Formatter.Binary; //runtime
3、使用二进制格式化器
//【1】创建文件流
FileStream fs = new FileStream("objStudent.stu", FileMode.Create);
//【2】创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
//【3】调用序列化方法
formatter.Serialize(fs, objStudent);
//【4】关闭文件流
fs.Close();
new一个二进制格式化器后,调用Serialize 传入 ( 文件流, 对象 )
随后关闭文件流
使用二进制格式化器,生成的是二进制信息
(二)反序列化
//【1】创建文件流
FileStream fs = new FileStream("objStudent.stu", FileMode.Open);
//【2】创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
//【3】调用反序列方法
Student objStudent = (Student)formatter.Deserialize(fs);
//【4】关闭文件流
fs.Close();
流程和序列化大差不差,,先 创建文件流(读取对象) → new一个 格式化器 → (重点) 调用反序列方法时 要进行强转
总结:
C#网络编程学习---序列化和反序列化
1、什么是序列化和反序列化
当客户端和服务器进行远程连接时,互相可以发送各种类型的数据。但都要先把这些对象转换为字节序列,才能在网络上进行传输。
序列化:就是发送方 把对象转换为字节序列的过程。
反序列化:就是接收方 把字节序列转换为对象的过程。
2、BinaryFormatter
BinaryFormatter以二进制格式序列化和反序列化对象。
属性:
Serializable:表示可以被序列化
NonSerializable:屏蔽序列化
方法:
binaryFormatter.Serialize(Stream stream,Object obj):把对象序列化到指定的流
binaryFormatter.Deserialize(Stream stream):把指定流反序列化成对象
序列化
/// <summary>
/// 序列化,Object对象转换为字节数组
/// </summary>
private static byte[] EncodeObj(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj); //把obj序列化到ms流中
byte[] data = new byte[ms.Length];
Buffer.BlockCopy(ms.GetBuffer(), 0, data, 0, (int)ms.Length);
return data;
}
}
反序列化
/// <summary>
/// 反序列化
/// </summary>
private static object DecodeObj(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
{
BinaryFormatter bf = new BinaryFormatter();
return bf.Deserialize(ms);
}
}
以上是关于C# 序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章