C#中的序列化和Unity中的序列化

什么是序列化和反序列化?

  • 序列化:将对象(object)转化为二进制字节序列

  • 反序列化:将二进制字节序列转化为对象(object)

  • 序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。
    本质就是讲信息按照一定格式二进制化(字节序列),从而可以进行存储或者传输

    方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变化成字节序列也更方便网络运输和传播。

  • 序列化不一定会保存到文件或数据库中,可能只在内存中

  • 在这里插入图片描述

     

    进阶理解

    序列化可以用于跨平台。实际上就是把一段数据翻译成(序列化)比较底层的语言(如汇编、机器语言),而基于这个底层语言再可以翻译(反序列化)成多种上一层的语言。
    两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

    可以简单的理解序列化的目的就是为了跨进程传递格式化数据

    对于游戏领域来说,序列化讲的是游戏中的数据写进文件,包括角色的生命、攻击、防御等等,这样当游戏需要调整时(比如平衡性问题),就只需对文件进行改写,而不需要讲游戏重新进行编译、玩家在更新的时候也只需要下载几个被改写的文件即可 

    序列化有什么作用?

    传输数据。比如网络中只能传递二进制字节流。

  • 将对象的状态保持在存储媒体中,以便在以后重新创建精确的对象信息(不是唯一手段)
  • 可以通过字节流在不同应用程序域中传递
     

    Unity序列化
    Unity会自动序列化所有你自己写的脚本组件(Scriptable Object), 重载新的程序集,并且重新创建你的脚本组件。简单的说,序列化后,数据就可以被保存了。Unity序列化过程不走.NET的方法,而是Unity内部的方法。

    序列化后的数据具有持久存储的特性,简单理解只要是在Inspector窗口中暴露出来的字段都是序列化后的结果
     

    [Serializable]和[SerializeField]是一对好兄弟,一个是用来序列化类和结构体,一个是用来序列化属性成员的。
    对象序列化后具有持久保存的特点,Unity提供了两种将持久数据保存成文件的操作(包括读取)
    通过xml,json等序列化Serialize和反序列化DeSerialize操作
    Unity提供的ScriptableObject
    SerializeField : 表示变量可被序列化。众所周知,公有变量可以在检视面板中看到并编辑,而私有和保护变量不行。SerializeField与private,protected结合使用可以达到让脚本的变量在检视面板里可视化编辑,同时保持它的私有性的目的。
    HideInInspector : 将原本显示在检视面板上的序列化值隐藏起来。
    NonSerialized :通过此方法可以将一个公有变量不序列化并且不显示在检视面板中。
    Serializable:用在类的前面,表示该类可被序列化。
    在这里插入图片描述

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值