Xml数据管理类(优化存储读取数据)结合反射知识点
发布日期:2021-05-08 16:29:41 浏览次数:16 分类:精选文章

本文共 2238 字,大约阅读时间需要 7 分钟。

C# XML 数据管理与序列化反序列化实例

1. 简易版 XML 数据管理

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);        }    }}

2. Dictionary 序列化与反序列化实现

public class SerializerDictionary
: Dictionary
, 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
item in this) { keySer.Serialize(writer, item.Key); valueSer.Serialize(writer, item.Value); } }}

以上代码实现了一个用于 XML 数据管理的 XmlDataMgr 类,以及一个用于序列化与反序列化 Dictionary 的自定义实现 SerializerDictionary。通过 SaveDataLoadData 方法,可以将对象数据持久化到 XML 文件中,同时支持 Dictionary 对象的 XML 序列化和反序列化。

上一篇:C#逻辑锻炼
下一篇:简单的xml读取存储方法(未优化)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月26日 16时35分21秒