侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

C#基础加强(10)之对象序列化(二进制)

zze
zze
2019-08-15 / 0 评论 / 0 点赞 / 520 阅读 / 1549 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

介绍

对象序列化是将对象转换为二进制数据(字节流),反序列化是将二进制数据还原成对象。对象的非持久态的,不仅在程序重启、操作系统重启会造成对象的丢失,就是退出函数范围等都可能造成对象的消失,而序列化与反序列化就是为了完成对象的持久化。

使用

新建可序列化的实体类:

[Serializable] // 该特性标记该类可序列化
public class Person
{
    private int id;

    private string name;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public override string ToString()
    {
        return string.Format("Id: {0}, Name: {1}", id, name);
    }
}

序列化

var person = new Person();
person.Id = 1;
person.Name = "张三";
// 初始化序列化工具类对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenWrite("D:/data"); // 获取一个输出流对象
binaryFormatter.Serialize(fs,person); // 执行序列化
fs.Close();

反序列化

// 初始化序列化工具类对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenRead("D:/data"); // 获取一个输入流对象
var obj = binaryFormatter.Deserialize(fs);
Console.WriteLine(obj); // Id: 1, Name: 张三
fs.Close();

注意事项

  • 序列化类必须标注上 [Serializable] 特性。
  • 序列化类的父类也必须标注上 [Serializable] 特性。
  • 序列化类的所有成员的类型也必须标注上 [Serializable] 特性。
  • 序列化只会对类中的字段序列化,只能序列化一些状态信息。
  • 类结构修改后那么之前序列化的内容尽量不要再用了,否则可能出错。
0

评论区