C# 序列化与反序列化
程序员文章站
2022-06-16 08:26:42
...
功能,目的: 把对象(类)通过流的方式轻松地存储和传输数据
有时候对象需要以文件的方式存储起来,或者利用网络等传输给其他地方,那么就需要序列化这个对象,使它以二进制保存起来.
序列化: 将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流.
反序列化: 将流转换为对象.
引用
using System.Runtime.Serialization.Formatters.Binary;
1.序列化需要创建一个实例:
var bf = new BinaryFormatter();
2.使用 bf 的序列化方法:
bf.Serialize(FileStream fs, object);
第一个参数为文件流,第二个为需要序列化的对象
3.需要序列化的类应该在顶部添加 [Serializable] 表示类可以被序列化
[Serializable]
class Product
{
public string text = "123";
}
4.具体序列化示例代码:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization.Formatters.Binary;
namespace 序列化
{
[Serializable]
class Product
{
public string text = "123";
}
class Program
{
static void Main(string[] args)
{
Product dProduct = new Product(); //此dProduct为需要被序列化的对象
using (var fs = new FileStream("Product.bin", FileMode.Create))
{
var bf = new BinaryFormatter();
bf.Serialize(fs, dProduct);
}
}
}
}
5.反序列化示例代码
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization.Formatters.Binary;
namespace 序列化
{
[Serializable]
class Product
{
public string text = "123";
}
class Program
{
static void Main(string[] args)
{
//序列化
//Product dProduct = new Product(); //此dProduct为需要被序列化的对象
//using (var fs = new FileStream("Product.bin", FileMode.Create))
//{
// var bf = new BinaryFormatter();
// bf.Serialize(fs, dProduct);
//}
//反序列化
Product dProduct = null;
using (var fs = new FileStream("Product.bin", FileMode.Open))//注意FileMode为Open
{
var bf = new BinaryFormatter();
dProduct = (Product)bf.Deserialize(fs); //把反序列后的流强制转换为Product类,然后赋值给dProduct
}
Console.WriteLine(dProduct.text);
Console.Read();
}
}
}