标准流程
using UnityEngine;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;
using System.Collections.Generic;
public class SerializeObjectClass :MonoBehaviour{
private string m_str_FileLocation;
private string fileName;
// Use this for initialization
void Start () {
m_str_FileLocation=Application.persistentDataPath;
fileName="NPC.xml";
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.K)){
NPCData da=new NPCData();
da.name="luo";
da.a.Add(3);
da.a.Add(2);
da.a.Add(7);
da.a.Add(5);
StringIntData int1=new StringIntData();
int1.name="jiji";
int1.state=8;
StringIntData int2=new StringIntData();
int2.name="dsfdfd";
int2.state=545445;
da.stringintData.Add(int1);
da.stringintData.Add(int2);
string dataString=SerializeObject(da);
SaveXML(dataString);
}
if(Input.GetKeyDown(KeyCode.U)){
NPCData da=LoadData();
Debug.Log(da.a.Count);
Debug.Log(da.stringintData.Count);
Debug.Log(da.stringintData[1].state);
}
}
public NPCData LoadData()
{
NPCData m_LoadedData=null;
Debug.Log("start load game data");
string str_Data = LoadXML();
if (string.IsNullOrEmpty(str_Data) == true)
{
return m_LoadedData;
}
m_LoadedData = DeserializeObject(str_Data)as NPCData;
return m_LoadedData;
Debug.Log("finish load game data:" + str_Data);
}
void SaveXML(string str_Data)
{
StreamWriter sw;
FileInfo fi = new FileInfo(m_str_FileLocation + "/" + fileName);
if (fi.Exists == false)
{
sw = fi.CreateText();
}
else
{
fi.Delete();
sw = fi.CreateText();
}
sw.Write(str_Data);
sw.Close();
Debug.Log("SaveXML:" + str_Data);
}
string LoadXML()
{
string str_FilePath = m_str_FileLocation + "/" + fileName;
FileInfo fi = new FileInfo(str_FilePath);
if (fi.Exists == false)
{
return null;
}
StreamReader sr = File.OpenText(str_FilePath);
if (sr != null)
{
string str_Data = sr.ReadToEnd();
sr.Close();
return str_Data;
}
else
{
return null;
}
}
string SerializeObject(object obj)
{
string str_XmlizedString = null;
MemoryStream ms = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(NPCData));
XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);
xs.Serialize(xtw, obj);
ms = (MemoryStream)xtw.BaseStream;
str_XmlizedString = UTF8ByteArrayToString(ms.ToArray());
return str_XmlizedString;
}
object DeserializeObject(string str_XmlizedString)
{
XmlSerializer xs = new XmlSerializer(typeof(NPCData));
MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(str_XmlizedString));
return xs.Deserialize(ms);
}
string UTF8ByteArrayToString(byte[] ba)
{
UTF8Encoding ue = new UTF8Encoding();
string str_Constructed = ue.GetString(ba);
return (str_Constructed);
}
byte[] StringToUTF8ByteArray(string str_XmlString)
{
UTF8Encoding ue = new UTF8Encoding();
byte[] ba = ue.GetBytes(str_XmlString);
return ba;
}
public class NPCData{
public string name;
public List<int> a=new List<int>();
public List<StringIntData> stringintData=new List<StringIntData>();
}
public class StringIntData{
public string name;
public int state;
}
}