C# Dictionary序列化/反序列化
2012-08-16 15:52
489 查看
1.说明:Dictionary对象本身不支持序列化和反序列化,需要定义一个继承自Dictionary, IXmlSerializable类的自定义类来实现该功能。感觉完全可以把这样的类封装到C#库中,很具有通用性嘛,至今没有遇到不能用的情况的说,或许出于其他方面的考虑microsoft才没有这么做。
2.SerializableDictionary自定义类
3.使用
a.定义SerializableDictionary对象,这里以存储<string,string>键对为例:
b.添加元素
c.序列化
d.反序列化
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序列化/反序列化
- c# Json Dictionary序列化和反序列化
- C#里 如何序列化与反序列化 hashtable Dictionary及C#连接mysql数据库
- C#里 如何序列化与反序列化 hashtable Dictionary及C#连接mysql数据库
- c# Json Dictionary序列化和反序列化
- C#Json序列化、反序列化之Dictionary 字典类型
- C#序列化和反序列化
- C#实现对象的Xml格式序列化及反序列化
- C#之序列化和反序列化
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)
- 深入探讨C#序列化和反序列化
- unity3d中ProtoBuf的序列化和反序列化c#
- C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll
- Unity 中使用C#的序列化和反序列化处理游戏数据
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)
- Dictionary序列化和反序列化
- C# Json序列化和反序列化辅助类(官方DLL)
- C# 编写通用的JSON数据进行序列化和反序列化
- 深度剖析C#序列化和反序列化
- c# xml序列化和反序列化