zoukankan      html  css  js  c++  java
  • 序列化、反序列化(Serializable特性)

    前言
    之前理解错误,并不是只有添加了[serializable]的类才可以被序列化(转为json等等)
    所有普通类都可以被序列话(abstract之类除外。。)
    大多数的用途是
    想要把这个类显示在Inspector面板上时
    便会使用[serializable]
    其他情况一般就不会用了
    2021.6.18补丁

    //需要被实例化的类 using System.Collections; using UnityEngine; [Serializable] public class SerializableClass : MonoBehaviour { public string name; public SerializableClass(string name) { this.name = name; } }
    using System.Collections;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using UnityEngine;
    
    public class SerializableTest : MonoBehaviour
    {
        public SerializableClass serializableClass;
    
        private void Start()
        {
            this.serializableClass = new serializableClass("cat");
        }
    
        private void OnGUI()
    {
             if (GUI.Button(new Rect(10,10,150,100),"Serialize"))
             {
                 string fileName = "Assets/SerializableClass.dat";
                 Stream fStream = new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite);
                 BinaryFormatter binFormat = new BinaryFormatter();
                 binFormat.Serialize(fStream,this.serializableClass);
                 fStream.Close();
                 this.serializableClass.name = "dog";
                 Debug.Log("the class name is : " + this.serializableClass.name);
             }
            if (GUI.Button(new Rect(300,10,150,100),"Deserialize")
            {
                string fileName = "Assets/SerializableClass.dat";
                Stream fStream = new FileStream(fileName,FileMode.Open,FileAccess.Read);
                BinaryFormatter binFormat = new BinaryFormatter();
                this.serializableClass = binFormat.Deserialize(fStream) as SerializableClass;
                fStream.Close();
                Debug.Log("the class name is : " + this.serializableClass.name);
            }
    }
    }
     
     

        在此脚本中,我们首先在Start方法中实例化了一个SerializableClass类的对象,名为serializableClass。然后通过OnGUI方法中创建两个按钮分别执行序列化和反序列化的操作。

        在序列化部分,将SerializableClass的实例序列化为二进制文件,保存到"Assets/SerializableClass.dat",此时被序列化为二进制的对象的name字段内容为“cat”。下面将该字段的内容修改为“dog”,这时,变量SerializableClass的name字段已经从“cat”变为了“dog”。

        然后在反序列化的部分,将"Assets/SerializableClass.dat"这个二进制文件反序列化为类的实例。由于二进制中对应的类的实例的name字段仍为“cat”,将反序列化后的类实例赋值给seri变量,此时serializableClass变量就成了修改name字段之前的serializableClass变量了。

     
     
    声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出
  • 相关阅读:
    Struts2的OGNL的用法
    详解DataTable DataSet以及与数据库的关系
    ModBus 协议
    STM32串口接收中断溢出问题解决
    STM32 GD32 时钟设置
    STM32 中断
    STM32 中断系统
    STM32中断系统(NVIC和EXTI)
    STM32中断系统
    GD32E230 GPIO 时钟
  • 原文地址:https://www.cnblogs.com/fws94/p/6307127.html
Copyright © 2011-2022 走看看