- 序列化是把一个对象持久化到一个磁盘中的过程。应用程序的一部分,甚至另一个应用程序都可以反序列化对象,使它的状态与序列化之前相同。
- 会用到System.Xml.Serialization名称空间。
- 序列化:System.Xml.Serialization命名空间中最重要的类是XmlSerializer。要序列化对象,首先需要实例化一个XmlSerializer对象,指定要序列化的对象类型,然后实例化一个流/写入器对象,以把文件写入流/文档中。最后一步是在XmlSerializer上调用Serializer()方法,给它传递流/写入器对象和要序列化的对象。
- 反序列化:从XML文档中反序列化对象,应执行上述逆向过程。创建一个流/读取器对象和一个XmlSerializer对象,然后给DeSerializer()方法传递该流/读取器对象。这个方法返回序列化的对象,尽管它需要强制转换为正确的类型。
------------玩家信息类----------
public class PlayerInfos
{
public struct Pos
{
public float x, y, z;
}
public Pos pos;
public string name;
public int level;
public int hp;
public PlayerInfos()
{
}
public PlayerInfos(int l, int h)
{
this.level = l;
this.hp = h;
}
}
------------------------------------------------------------------------------------
using System.IO;
using System.Xml.Serialization;
using UnityEditor;
using UnityEngine;
public class SerializedXML : MonoBehaviour {
private string path;
public GameObject player;
public GameObject newPlayer;
PlayerInfos info=new PlayerInfos(1,60);
void Awake()
{
path = Application.dataPath + "/xml/MySerializedXML.xml";
player=GameObject.Find("Player");
newPlayer=new GameObject("newPlayer");
}
void Update () {
if (Input.GetMouseButtonDown(0))//序列化
{
Serialized();
}
if (Input.GetMouseButtonDown(1))//反序列化
{
DeSerialized();
}
if (Input.GetKeyDown(KeyCode.L))
{
if (info.level < 10)
{
info.level++;
}
}
if (Input.GetKeyDown(KeyCode.H))
{
if (info.hp < 100)
{
info.hp += 10;
}
}
}
----------序列化----------
public void Serialized()
{
info.pos.x = player.transform.position.x;
info.pos.y = player.transform.position.y;
info.pos.z = player.transform.position.z;
info.name = player.name;
StreamWriter sw;
FileInfo fi = new FileInfo(path);
if (fi.Exists)
{
fi.Delete();
}
sw = fi.CreateText();
XmlSerializer xml = new XmlSerializer(typeof(PlayerInfos));
xml.Serialize(sw,info);
sw.Close();
AssetDatabase.Refresh();
}

----------反序列化----------
public void DeSerialized()
{
FileStream fs=new FileStream(path,FileMode.Open);
XmlSerializer xml = new XmlSerializer(typeof(PlayerInfos));
PlayerInfos info= xml.Deserialize(fs) as PlayerInfos;
newPlayer.transform.position=new Vector3(info.pos.x,info.pos.y,info.pos.z);
newPlayer.name = info.name;
}
}
序列化时: