C# SerializableDictionary序列化/反序列化
说明:Dictionary对象本身不支持序列化和反序列化,需要定义一个继承自Dictionary, IXmlSerializable类的自定义类来实现该功能。感觉完全可以把这样的类封装到C#库中,很具有通用性嘛,至今没有遇到不能用的情况的说,或许出于其他方面的考虑microsoft才没有这么做。
2.SerializableDictionary自定义类
- [Serializable]
- public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
- {
- public SerializableDictionary() { }
- public void WriteXml(XmlWriter write) // Serializer
- {
- XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
- XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
- foreach (KeyValuePair<TKey, TValue> kv in this)
- {
- write.WriteStartElement("SerializableDictionary");
- write.WriteStartElement("key");
- KeySerializer.Serialize(write, kv.Key);
- write.WriteEndElement();
- write.WriteStartElement("value");
- ValueSerializer.Serialize(write, kv.Value);
- write.WriteEndElement();
- write.WriteEndElement();
- }
- }
- public void ReadXml(XmlReader reader) // Deserializer
- {
- reader.Read();
- XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
- XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
- while (reader.NodeType != XmlNodeType.EndElement)
- {
- reader.ReadStartElement("SerializableDictionary");
- reader.ReadStartElement("key");
- TKey tk = (TKey)KeySerializer.Deserialize(reader);
- reader.ReadEndElement();
- reader.ReadStartElement("value");
- TValue vl = (TValue)ValueSerializer.Deserialize(reader);
- reader.ReadEndElement();
- reader.ReadEndElement();
- this.Add(tk, vl);
- reader.MoveToContent();
- }
- reader.ReadEndElement();
- }
- public XmlSchema GetSchema()
- {
- return null;
- }
- }
3.使用
a.定义SerializableDictionary对象,这里以存储<string,string>键对为例:
- SerializableDictionary<string, string> serializableDictionary = new SerializableDictionary<string, string>();
b.添加元素
- serializableDictionary.Add("Key1", “Value1”);
- ......
c.序列化
- using (FileStream fileStream = new FileStream(fileName, FileMode.Create))
- {
- XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>));
- xmlFormatter.Serialize(fileStream, this.serializableDictionary);
- }
注:文件名fileName自己定义,如“file.xml”
d.反序列化
- using (FileStream fileStream = new FileStream(fileName, FileMode.Open))
- {
- XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>));
- this.serializableDictionary = (SerializableDictionary<string,string>)xmlFormatter.Deserialize(fileStream);
- }
C# SerializableDictionary序列化/反序列化的更多相关文章
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...
- C#之你懂得的序列化/反序列化
前言:写此文章一方面是为了巩固对序列化的认识,另一方面是因为本人最近在面试,面试中被问到“为什么要序列化”.虽然一直在使用,自己也反复的提到序列化,可至于说为什么要序列化,还真的没想过,所以本文就这样 ...
- springboot学习(三)——http序列化/反序列化之HttpMessageConverter
以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty ...
- java序列化反序列化深入探究
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...
- java序列化反序列化深入探究(转)
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- 二进制数据的序列化反序列化和Json的序列化反序列化的重要区别
前言:最近一个一个很奇怪的问题,很明白的说,就是没看懂,参照下面的代码: /// <summary> /// 反序列化对象 /// </summary> /// <typ ...
随机推荐
- WebService开发常用功能详解
一.WebService中常用的属性(Attributes)1. Web Service(Web服务)提供以下三个属性. Namespace:此属性的值包含 XML Web Service的默认 ...
- .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我 ...
- Java多线程的安全问题
/*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...
- Java实战之04JavaWeb-07Listener和Filter
一.监听器Listener javaEE的13们规范中 包括servlet技术和jsp技术 servlet规范中包括三门技术:(servlet的三大组件) servelt技术 Listener技术 ...
- 05_XML的解析_01_dom4j 解析
[简述] Xml文件出了给开发者看,更多情况使用程序读取xml文件里的内容,这叫做xml解析. 根据解析方式分为:DOM解析 和 SAX解析 [解析工具] (一). 使用DOM解析原理的工具: 1.J ...
- tomcat服务器启动错误
有的时候,启动tomcat,显示的他已经启动了,但是就是没有加载任何工程,最后页面报404错误. 这时候,可以试着把服务器Clean一下
- js组件开发流程
html代码 <div id="div1"></div> <div id="div2"></div> <d ...
- C语言自带的快速排序(qsort)函数使用方法
感觉打快排太慢了,找到了c语言自带的函数.这函数用起来没c++的方便,不过也够了. 函数名称:qsort,在头文件:<stdlib.h>中 不多说,上代码: #include <st ...
- mongodb 简单部署方案及实例
mongodb 简单部署方案及实例 转载:http://my.oschina.net/zhuzhu0129/blog/53290 第一节 准备工作 一 安装mongodb 我这里选用rehl 5.6 ...
- WCF 消息压缩性能问题及解决方法
最近使用WCF作为通迅框架开发一套信息系统,系统使用传统C/S框架,系统有可能会部署在互联网上,因此决定对传输的数据进行GZIP压缩,原来在使用.NET Remoting时,可以使用插入自定义的Cha ...