Dictionary 序列化与反序列化
[转:http://blog.csdn.net/woaixiaozhe/article/details/7873582]
1.说明:Dictionary对象本身不支持序列化和反序列化,需要定义一个继承自Dictionary, IXmlSerializable类的自定义类来实现该功能。感觉完全可以把这样的类封装到C#库中,很具有通用性嘛,至今没有遇到不能用的情况的说,或许出于其他方面的考虑microsoft才没有这么做。
2.SerializableDictionary自定义类
1 [Serializable] 2 public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable 3 { 4 public SerializableDictionary() { } 5 public void WriteXml(XmlWriter write) // Serializer 6 { 7 XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey)); 8 XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); 9 10 foreach (KeyValuePair<TKey, TValue> kv in this) 11 { 12 write.WriteStartElement("SerializableDictionary"); 13 write.WriteStartElement("key"); 14 KeySerializer.Serialize(write, kv.Key); 15 write.WriteEndElement(); 16 write.WriteStartElement("value"); 17 ValueSerializer.Serialize(write, kv.Value); 18 write.WriteEndElement(); 19 write.WriteEndElement(); 20 } 21 } 22 public void ReadXml(XmlReader reader) // Deserializer 23 { 24 reader.Read(); 25 XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey)); 26 XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); 27 28 while (reader.NodeType != XmlNodeType.EndElement) 29 { 30 reader.ReadStartElement("SerializableDictionary"); 31 reader.ReadStartElement("key"); 32 TKey tk = (TKey)KeySerializer.Deserialize(reader); 33 reader.ReadEndElement(); 34 reader.ReadStartElement("value"); 35 TValue vl = (TValue)ValueSerializer.Deserialize(reader); 36 reader.ReadEndElement(); 37 reader.ReadEndElement(); 38 this.Add(tk, vl); 39 reader.MoveToContent(); 40 } 41 reader.ReadEndElement(); 42 43 } 44 public XmlSchema GetSchema() 45 { 46 return null; 47 } 48 }
3.使用
a.定义SerializableDictionary对象,这里以存储<string,string>键对为例:
1 SerializableDictionary<string, string> serializableDictionary = new SerializableDictionary<string, string>();
b.添加元素
1 serializableDictionary.Add("Key1", “Value1”);
c.序列化
1 using (FileStream fileStream = new FileStream(fileName, FileMode.Create)) 2 { 3 XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>)); 4 xmlFormatter.Serialize(fileStream, this.serializableDictionary); 5 }
注:文件名fileName自己定义,如“file.xml”
d.反序列化
1 using (FileStream fileStream = new FileStream(fileName, FileMode.Open)) 2 { 3 XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>)); 4 this.serializableDictionary = (SerializableDictionary<string,string>)xmlFormatter.Deserialize(fileStream); 5 }
Dictionary 序列化与反序列化相关推荐
- Dictionary Serializer(Dictionary 序列化)
有关于Dictionary序列化,网上有许多.不过我都是没有成功应用:所以共享成功应用案例代码. 1.Dictionary本身是不支持序列化的,所以必须继承IXmlSerializable. 2.使用 ...
- JavaScriptSerializer序列化和反序列化JSON:使用自定义JavaScriptConverter
JSON的序列化和反序列化已经成为Web开发必不可少的知识.现在常用的有System.Web.Script.Serialization下的JavaScriptSerializer来进行处理:另外一个比 ...
- json 反序列化 父子类型_json类序列化与反序列化参考
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Runtime.Ser ...
- YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查
2019独角兽企业重金招聘Python工程师标准>>> 一.YUDBModel 介绍 架构: 使用runtime和Sqlite实现NSObject扩展类YUDBModel,直接实现( ...
- ASP.NET中JSON的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...
- XML的序列化和反序列化 详细介绍
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- 深入Atlas系列:探究序列化与反序列化能力(下) - JavaScriptSerializer
在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类的serialize和deserialize两个静态方法提供.在 ...
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...
- Json和其序列化和反序列化
最近经常在说Json传值,Json序列化,什么是Json?什么又是Json的序列化和反序列化? 什么是 JSON ? 大家是否知道Json的全称?-JavaScript Object Notation ...
最新文章
- Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现
- 选择PHP,选择自由与开源
- PHP监控linux服务器负载
- java uuid会重复吗_记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?...
- jquery UI 后台图
- html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
- [转]写好shell脚本的13个技巧
- SAP UI5 应用开发教程之三十六 - 使用 Chrome 开发者工具 Elements 标签动态修改 CSS 类试读版
- 2021年度最全面JVM虚拟机,类加载过程与类加载器
- Python拓展12(使配置文件生效ConfigParser模块)
- oracle 以1开头以9结尾_小学生记叙文写作技巧六——如何把握好文章的开头和结尾呢?...
- 操作系统COM组件的概念
- 详解 n 维向量、n 维数组 和 矩阵的维度
- 第6章第27节:画面太空怎么办:使用小元素填充空旷的版面 [PowerPoint精美幻灯片实战教程]
- java中Scanner,Randon,ArrayList
- 一键U盘装系统 电脑为什么突然打不开
- python 提取sogou中文语料库
- 植物大战僵尸中文年度版
- baseline是什么
- C28xx:File Loader:Data verificaton failed at address 0xxx Please verify target memory and memory map