C# Dictionary序列化/反序列化
来源:互联网 发布:开展数据库系统培训 编辑:程序博客网 时间:2024/05/23 14:00
1.说明: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);
- }
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# Dictionary序列化/反序列化
- C# Dictionary序列化/反序列化
- 序列化及反序列化Dictionary
- C#里 如何序列化与反序列化 hashtable Dictionary及C#连接mysql数据库
- DataContractJsonSerializer反序列化Dictionary
- c#序列化与反序列化
- c# 序列化和反序列化
- C#序列化和反序列化
- C#序列化和反序列化
- C#序列化与反序列化
- C#序列化和反序列化
- c#序列化和反序列化
- C#序列化和反序列化
- C#序列化和反序列化
- C# - 序列化和反序列化
- C#序列化和反序列化
- C#序列化与反序列化
- C#序列化和反序列化
- mysql主从库
- Spinner
- Cocos2d-x 的CCObject与autorelease 之深入分析
- 本周推荐10款免费的网站模板设计
- iOS学习笔记20—获取当前APP版本
- C# Dictionary序列化/反序列化
- 人人都是开发者:5款傻瓜式APP开发工具
- [cocos2d-x]例如C++的成员函数指针实现委托、监听者模式
- Android 如何让service被管理器杀死后自动重启
- CCS 软件使用经验四则
- Envi中不规则栅格的裁剪
- MERGE INTO USING ON WHEN MATCHED THEN WHEN NOT MATCHED THEN
- hdu 1290——献给杭电五十周年校庆的礼物
- Xml读取和写入以及新建