
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
。通过 SaveData
和 LoadData
方法,可以将对象数据持久化到 XML 文件中,同时支持 Dictionary 对象的 XML 序列化和反序列化。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月26日 16时35分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
02、MySQL—数据库基本操作
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
go语言简单介绍,增强了解
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
MongoDB 快速扫盲贴
2019-03-05
one + two = 3
2019-03-05
sctf_2019_easy_heap
2019-03-06
PyQt5之音乐播放器
2019-03-06
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
SQL注入
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
调试vs2019代码的流程
2019-03-06
脱壳与加壳-加壳-6-代码实现加密导入表
2019-03-06
Typora配置PicGo时,提示Failed to fetch
2019-03-06
bcolz的新操作
2019-03-06