using UnityEngine;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;
/// <summary>
/// 持久化工具类
/// </summary>
public class Persistence : MonoBehaviour {
//持久化文件路径
static string FileLocation = Application.dataPath + "//StreamingAssets//Xml//Persistence//";
/// <summary>
/// 保存数据到XML
/// </summary>
public static void Save(string fileName, object obj){
CreateXML(fileName,SerializeObject(obj));
}
/// <summary>
/// 加载XML数据
/// </summary>
public static object Load(string fileName, System.Type type){
return DeserializeObject(type,LoadXML(fileName));
}
/// <summary>
/// 序列化对象
/// </summary>
public static string SerializeObject(object pObject)
{
string XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(pObject.GetType());
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
/// <summary>
/// 反序列化对象
/// </summary>
public static object DeserializeObject(System.Type type,string pXmlizedString)
{
XmlSerializer xs = new XmlSerializer(type);
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
}
/// <summary>
/// 将二进制转换为字符串
/// </summary>
public static string UTF8ByteArrayToString(byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
}
/// <summary>
/// 将字符串转换为二进制
/// </summary>
public static byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
/// <summary>
/// 创建XML文件
/// </summary>
public static void CreateXML(string fileName,string dataStr)
{
StreamWriter writer;
FileInfo t = new FileInfo(FileLocation+"//"+ fileName + ".xml");
if(!t.Exists){
writer = t.CreateText();
}else{
t.Delete();
writer = t.CreateText();
}
writer.Write(dataStr);
writer.Close();
}
/// <summary>
///加载XML文件
/// </summary>
public static string LoadXML(string fileName)
{
StreamReader r = File.OpenText(FileLocation+"//"+ fileName + ".xml");
string info = r.ReadToEnd();
r.Close();
return info;
}
}