简易版
public class XmlDataMgr
{
private static XmlDataMgr instance = new XmlDataMgr();
public static XmlDataMgr Instance => instance;
private XmlDataMgr() { }
public void SaveData(object data, string fileName)
{
string path = Application.persistentDataPath + "/" + fileName + ".xml";
using (StreamWriter writer = new StreamWriter(path))
{
XmlSerializer s = new XmlSerializer(data.GetType());
s.Serialize(writer, data);
}
}
public object LoadData(Type type, string fileName)
{
string path = Application.persistentDataPath + "/" + fileName + ".xml";
if(!File.Exists(path))
{
path = Application.streamingAssetsPath + "/" + fileName + ".xml";
if(!File.Exists(path))
{
return Activator.CreateInstance(type);
}
}
using (StreamReader reader = new StreamReader(path))
{
XmlSerializer s = new XmlSerializer(type);
return s.Deserialize(reader);
}
}
}
实现dictionary的序列化与反序列化
public class SerializerDictionary<Tkey, TValue> : Dictionary<Tkey,TValue>,IXmlSerializable
{
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
XmlSerializer keySer = new XmlSerializer(typeof(Tkey));
XmlSerializer valueSer = new XmlSerializer(typeof(TValue));
reader.Read();
while (reader.NodeType != XmlNodeType.EndElement)
{
Tkey key = (Tkey)keySer.Deserialize(reader);
TValue value = (TValue)valueSer.Deserialize(reader);
this.Add(key, value);
}
reader.Read();
}
public void WriteXml(XmlWriter writer)
{
XmlSerializer keySer = new XmlSerializer(typeof(Tkey));
XmlSerializer valueSer = new XmlSerializer(typeof(TValue));
foreach (KeyValuePair<Tkey,TValue> item in this)
{
keySer.Serialize(writer, item.Key);
valueSer.Serialize(writer, item.Value);
}
}
}