先创建一个可以序列化的类
[System.Serializable] public class TestSerialize { [XmlAttribute("Id")] public int Id { get; set; } [XmlAttribute("Name")] public string Name { get; set; } [XmlElement("List")] public List<int> List { get; set; } }类转换成XML
void XmlSerialize(TestSerialize testSerialize) { FileStream fs = new FileStream(Application.dataPath+"/test.xml",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite); XmlSerializer xml = new XmlSerializer(typeof(TestSerialize)); StreamWriter sw = new StreamWriter(fs, new System.Text.UTF8Encoding(false)); //这里的false用来去除UTF-8编码格式文件的BOM头 xml.Serialize(sw, testSerialize); sw.Close(); fs.Close(); }XML转换成类
TestSerialize XmlDeserialize() { FileStream fs = new FileStream(Application.dataPath + "/test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); XmlSerializer xml = new XmlSerializer(typeof(TestSerialize)); TestSerialize serilizaTest = (TestSerialize)xml.Deserialize(fs); fs.Close(); return serilizaTest; }XML转换成二进制
void BinarySerialize(TestSerialize testSerialize) { FileStream fs = new FileStream(Application.dataPath + "/test.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, testSerialize); fs.Close(); }二进制转换成类
TestSerialize BinaryDeserialize() { TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/test.bytes"); Debug.Log(Application.dataPath + "/test.bytes"); MemoryStream stream = new MemoryStream(textAsset.bytes); BinaryFormatter bf = new BinaryFormatter(); TestSerialize testSerialize = (TestSerialize)bf.Deserialize(stream); stream.Close(); return testSerialize; }创建一个类,继承自ScriptableObject
[CreateAssetMenu(fileName ="TestAssets",menuName ="CreateAssets",order =0)] public class AssetsSerialize : ScriptableObject { public int Id; public string Name; public List<int> TestList; }之后可以在Unity中创建asset文件 可以在Inspector面板上更改属性 asset文件的读取
void ReadTestAssets() { AssetsSerialize assets = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerialize>("Assets/TestAssets.asset"); Debug.Log(assets.Id); Debug.Log(assets.Name); foreach (var i in assets.TestList) { Debug.Log(i); } }