序列化、反序列化(Serializable特性)

//需要被实例化的类
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变量了。

 
 
声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出

转载于:https://www.cnblogs.com/fws94/p/6307127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值