编写需要的序列化的代码TestSerilize.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Serialization;
[System.Serializable]
public class TestSerilize
{
[XmlAttribute("Id")]
public int Id { get; set; }
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("List")]
public List<int> List { get; set; }
}
如果不懂XmlAttribute与XmlElement是什么意思可以查询https://www.w3cschool.cn/jaxb2/jaxb2-dwxr2zom.html
Xml序列化与反序列化
序列化
代码如下
//创建对象
void SerilizeTest()
{
TestSerilize testSerilize = new TestSerilize();
testSerilize.Id =1;
testSerilize.Name = "pawn";
testSerilize.List = new List<int>();
testSerilize.List.Add(1);
testSerilize.List.Add(2);
XmlSerilize(testSerilize);
}
//序列化成xml
void XmlSerilize(TestSerilize testSerilize)
{
FileStream fileStream = new FileStream(Application.dataPath+"/Test.xml",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
XmlSerializer xml = new XmlSerializer(testSerilize.GetType());
xml.Serialize(sw, testSerilize);
sw.Close();
fileStream.Close();
}
执行SerilizeTest后我们可以在Assets目录下看到生成的XMl文件
![](https://img.haomeiwen.com/i15874139/98efe5c008fb08b8.png)
文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<TestSerilize xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="1">
<Name>pawn</Name>
<List>1</List>
<List>2</List>
</TestSerilize>
反序列化
代码如下
//xml反序列化
void XmlDeSerilize()
{
FileStream fs = new FileStream(Application.dataPath + "/Test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fs);
fs.Close();
Debug.Log(testSerilize.Id);
Debug.Log(testSerilize.Name);
}
执行XmlDeSerilize后结果
![](https://img.haomeiwen.com/i15874139/37f210cf30ff69e1.png)
二进制序列化与反序列化
序列化
代码如下
void BinarySerTest()
{
TestSerilize testSerilize = new TestSerilize();
testSerilize.Id = 2;
testSerilize.Name = "pawn";
testSerilize.List = new List<int>();
testSerilize.List.Add(1);
testSerilize.List.Add(2);
BinarySerilize(testSerilize);
}
void BinarySerilize(TestSerilize testSerilize)
{
FileStream fileStream = new FileStream(Application.dataPath + "/Test.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fileStream, testSerilize);
fileStream.Close();
}
执行SerilizeTest后我们可以在Assets目录下看到生成的bytes文件
![](https://img.haomeiwen.com/i15874139/db3f6381102f0d1b.png)
打开全是乱码
反序列化
代码如下
void BinaryDeSerilize()
{
TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/test.bytes");
MemoryStream stream = new MemoryStream(textAsset.bytes);
BinaryFormatter bf = new BinaryFormatter();
TestSerilize testSerilize = (TestSerilize)bf.Deserialize(stream);
stream.Close();
Debug.Log(testSerilize.Id);
Debug.Log(testSerilize.Name);
}
执行BinaryDeSerilize后结果
![](https://img.haomeiwen.com/i15874139/78948cf29b52a726.png)
assets序列化与反序列化
序列化
创建AssetsSerilize.cs代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="TestAssets",menuName ="CreatAssets",order =0)]
public class AssetsSerilize : ScriptableObject
{
public int Id;
public string Name;
public List<string> TestList;
}
然后我们在Assets面板下右键>Create下可以看到我们在代码里申明的CreatAssets
![](https://img.haomeiwen.com/i15874139/6e0369e1a8e7a36b.png)
点击CreatAssets,然后就会在当前目录生成TestAssets文件
![](https://img.haomeiwen.com/i15874139/2b55dc3d43c182ba.png)
点击生成的TestAssets文件,可以在Inspector面版下设置参数
![](https://img.haomeiwen.com/i15874139/8e37bdecfa55f617.png)
反序列化
代码如下
void ReadTestAssets()
{
AssetsSerilize assets = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerilize>("Assets/Scripts/TestAssets.asset");
Debug.Log(assets.Id);
}
执行ReadTestAssets后结果
![](https://img.haomeiwen.com/i15874139/4fc46d85c6047070.png)
网友评论