unity 序列化和反序列化


什么是序列化和反序列化
(1)序列化是指把對象轉換為字節序列的過程,而反序列化是指把字節序列恢復為對象的過程;.
  (2)序列化:對象序列化的最主要的用處就是在傳遞和保存對象的時候,保證對象的完整性和可傳遞性。序列化是把對象轉換成有序字節流,以便在網絡上傳輸或者保存在本地文件中。序列化后的字節流保存了對象的狀態以及相關的描述信息。序列化機制的核心作用就是對象狀態的保存與重建。

(3)反序列化:客戶端從文件中或網絡上獲得序列化后的對象字節流后,根據字節流中所保存的對象狀態及描述信息,通過反序列化重建對象

(4)本質上講,序列化就是把實體對象狀態按照一定的格式寫入到有序字節流,反序列化就是從有序字節流重建對象,恢復對象狀態。


2、為什么需要序列化與反序列化
我們知道,當兩個進程進行遠程通信時,可以相互發送各種類型的數據,包括文本、圖片、音頻、視頻等, 而這些數據都會以二進制序列的形式在網絡上傳送。
那么當兩個進程進行通信時,能否實現進程間的對象傳送呢?答案是可以的!如何做到呢?這就需要序列化與反序列化了!
換句話說,一方面,發送方需要把這個對象轉換為字節序列,然后在網絡上傳送;另一方面,接收方需要從字節序列中恢復出對象。
當我們明晰了為什么需要Java序列化和反序列化后,我們很自然地會想序列化的好處。其好處一是實現了數據的持久化,通過序列化可以把數據永久地保存到硬盤上(通常存放在文件里),二是,利用序列化實現遠程通信,即在網絡上傳送對象的字節序列。

總的來說可以歸結為以下幾點:

(1)永久性保存對象,保存對象的字節序列到本地文件或者數據庫中;
(2)通過序列化以字節流的形式使對象在網絡中進行傳遞和接收;
(3)通過序列化在進程間傳遞對象;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Newtonsoft.Json;

public class TestJSON : MonoBehaviour
{

    void Start()
    {

        Product product = new Product();
        product.dic[""] = "";
        product.name = "小明";
        string json = JsonConvert.SerializeObject(product);

        Product m = JsonConvert.DeserializeObject<Product>(json);

        Debug.Log(json);
        Debug.Log(m.name);
    }


    public class Product
    {
        public string name;
        public Dictionary<string, string> dic = new Dictionary<string, string>();
    }

}
TestJSON
ChatMessage
需要導入命名空間
using System.IO;
using System.Xml.Serialization;
using UnityEditor;

先定義一個類:
public class Studnet{
public string m_Name = "侖侖";
}

public class SerializeDemo : MonoBehaviour {


     void Start()
    {
        序列化:
        Student student = new Student();
        //第一要確定儲存的位置
        //Application.dataPath就是unity中的Asset文件夾 
        StreamWriter sw = new StreamWriter(Application.dataPath + "/Demo.xml");
        //第二要對什么類型序列化
        XmlSerializer xs = new XmlSerializer(typeof(Student));
        //第三對對象序列化
        xs.Serialize(sw, student);
        //關閉流
        sw.Close();
        //刷新Asset文件
        AssetDatabase.Refresh();
        //運行程序會在Asset目錄下看到Demo.xml文件


        反序列化
        //第一確定對哪個文件進行反序列化
        StreamReader sr = new StreamReader(Application.dataPath + "/Demo.xml");
        //第二要確定對什么類型反序列化
        XmlSerializer xs1 = new XmlSerializer(typeof(Student));
        //第三反序列化
        Student student1 = xs1.Deserialize(sr) as Student;
        //關閉流
        sr.Close();
        //會在控制台看到 “侖侖”
        print(student1.m_Name);
    }
}
SerializeDemo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM