1.需要序列化的类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Serialization;
/// <summary>
/// 需要序列化的类
/// </summary>
[System.Serializable]
public class TestSerilize
{
//序列化的元素
[XmlAttribute("Id")]
public int ID { get; set; }
[XmlAttribute("Name")]
public string Name { get; set; }
[XmlElement("Skill")]
public List<string> Skill;
}
2.序列化
/// <summary>
/// 初始化
/// </summary>
void BinarySerTest()
{
TestSerilize testSerilize = new TestSerilize
{
ID = 2,
Name = "二进制测试",
Skill = new List<string>()
};
testSerilize.Skill.Add("技能一");
testSerilize.Skill.Add("技能二");
SerilizeBinary(testSerilize);
}
/// <summary>
/// 序列化 转换为二进制
/// </summary>
/// <param name="testSerilize">需要序列化的资源</param>
void SerilizeBinary(TestSerilize testSerilize)
{
FileStream fileStream = new FileStream(Application.dataPath+"/TestBinary.bytes",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, testSerilize);//序列化
fileStream.Close();//关闭流文件
}
3.反序列化
/// <summary>
/// 反序列化
/// </summary>
/// <returns>反序列化后的资源</returns>
TestSerilize BinaryDeSerilize()
{
TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/TestBinary.bytes");
MemoryStream memoryStream = new MemoryStream(textAsset.bytes);
BinaryFormatter binaryFormatter = new BinaryFormatter();
TestSerilize testSerilize = (TestSerilize)binaryFormatter.Deserialize(memoryStream);
memoryStream.Close();
return testSerilize;
}
/// <summary>
/// 查看序列化后的内容
/// </summary>
void DeBinarySerilizeTest()
{
TestSerilize testSerilize = BinaryDeSerilize();
Debug.Log(testSerilize.ID);
Debug.Log(testSerilize.Name);
foreach (string skillName in testSerilize.Skill)
{
Debug.Log(skillName);
}
}