[转: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 序列化与反序列化相关推荐

  1. Dictionary Serializer(Dictionary 序列化)

    有关于Dictionary序列化,网上有许多.不过我都是没有成功应用:所以共享成功应用案例代码. 1.Dictionary本身是不支持序列化的,所以必须继承IXmlSerializable. 2.使用 ...

  2. JavaScriptSerializer序列化和反序列化JSON:使用自定义JavaScriptConverter

    JSON的序列化和反序列化已经成为Web开发必不可少的知识.现在常用的有System.Web.Script.Serialization下的JavaScriptSerializer来进行处理:另外一个比 ...

  3. json 反序列化 父子类型_json类序列化与反序列化参考

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Runtime.Ser ...

  4. YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查

    2019独角兽企业重金招聘Python工程师标准>>> 一.YUDBModel 介绍 架构: 使用runtime和Sqlite实现NSObject扩展类YUDBModel,直接实现( ...

  5. ASP.NET中JSON的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

  6. XML的序列化和反序列化 详细介绍

    为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...

  7. 深入Atlas系列:探究序列化与反序列化能力(下) - JavaScriptSerializer

    在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类的serialize和deserialize两个静态方法提供.在 ...

  8. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

  9. Json和其序列化和反序列化

    最近经常在说Json传值,Json序列化,什么是Json?什么又是Json的序列化和反序列化? 什么是 JSON ? 大家是否知道Json的全称?-JavaScript Object Notation ...

最新文章

  1. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现
  2. 选择PHP,选择自由与开源
  3. PHP监控linux服务器负载
  4. java uuid会重复吗_记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?...
  5. jquery UI 后台图
  6. html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
  7. [转]写好shell脚本的13个技巧
  8. SAP UI5 应用开发教程之三十六 - 使用 Chrome 开发者工具 Elements 标签动态修改 CSS 类试读版
  9. 2021年度最全面JVM虚拟机,类加载过程与类加载器
  10. Python拓展12(使配置文件生效ConfigParser模块)
  11. oracle 以1开头以9结尾_小学生记叙文写作技巧六——如何把握好文章的开头和结尾呢?...
  12. 操作系统COM组件的概念
  13. 详解 n 维向量、n 维数组 和 矩阵的维度
  14. 第6章第27节:画面太空怎么办:使用小元素填充空旷的版面 [PowerPoint精美幻灯片实战教程]
  15. java中Scanner,Randon,ArrayList
  16. 一键U盘装系统 电脑为什么突然打不开
  17. python 提取sogou中文语料库
  18. 植物大战僵尸中文年度版
  19. baseline是什么
  20. C28xx:File Loader:Data verificaton failed at address 0xxx Please verify target memory and memory map

热门文章

  1. svn服务器安装与配置
  2. 中国人工智能学会通讯——KS-Studio:一个知识计算引擎 1.2 知识图谱构建
  3. JavaScript之模仿块级作用域
  4. 弥补Web开发缺陷 实战HTML 5中存储API
  5. 图示Windows Server2008 Feature Components
  6. 详解linux io flush
  7. 关于go访问rabbitmq的连接池
  8. 下一代微服务Service Mesh原理及实践
  9. mysql 创建索引 终止_技术分享 | 常见索引问题处理
  10. LinkedList 实现原理及源码解析(jdk8 底层⽤的是链表)