我们经常在开发中碰到要序列化Dictionary对象但Dictionary类本身不支持序列化所需要继承Dictionary类并实现IXmlSerializable接口起来看看实现代码:
using;
using.Collections.Generic;
using.Runtime.Serialization;
using.Xml;
using.Xml.Schema;
using.Xml.Serialization;
Lmsoft.Collections.Generic
...{
/**////<summary>
///支持XML序列化泛型Dictionary类
///</summary>
///<typeparamname=\"TKey\"></typeparam>
///<typeparamname=\"TValue\"></typeparam>
[XmlRoot(\"Dictionary\")]
publicSerializableDictionary<TKey,TValue>
:Dictionary<TKey,TValue>,IXmlSerializable
...{
构造基类构造#region构造基类构造
publicSerializableDictionary:base
...{
}
publicSerializableDictionary(IDictionary<TKey,TValue>dictionary):base(dictionary)
...{
}
publicSerializableDictionary(IEqualityComparer<TKey>comparer):base(comparer)
...{
}
publicSerializableDictionary(capacity):base(capacity)
...{
}
publicSerializableDictionary(capacity,IEqualityComparer<TKey>comparer)
:base(capacity,comparer)
...{
}
protectedSerializableDictionary(SerializationInfoinfo,StreamingContextcontext):base(info,context)
...{ [Page]
}
#endregion
IXmlSerializable接口实现#regionIXmlSerializable接口实现
publicXmlSchemaGetSchema
...{
throwNotImplementedException;
}
/**////<summary>
///从对象XML表示形式生成该对象
///</summary>
///<paramname=\"reader\"></param>
publicvoidReadXml(XmlReaderreader)
...{
XmlSerializerkeySerializer=XmlSerializer(typeof(TKey));
XmlSerializervalueSerializer=XmlSerializer(typeof(TValue));
boolwasEmpty=reader.IsEmptyElement;
reader.Read;
(wasEmpty)
;
while(reader.NodeType!=XmlNodeType.EndElement)
...{
reader.ReadStartElement(\"Key\");
TKeykey=(TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement;
reader.ReadStartElement(\"Value\"); [Page]
TValuevalue=(TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement;
this.Add(key,value);
reader.MoveToContent;
}
reader.ReadEndElement;
}
/**////<summary>
///将对象转换为其XML表示形式
///</summary>
///<paramname=\"writer\"></param>
publicvoidWriteXml(XmlWriterwriter)
...{
XmlSerializerkeySerializer=XmlSerializer(typeof(TKey));
XmlSerializervalueSerializer=XmlSerializer(typeof(TValue));
foreach(TKeykeyhis.Keys)
...{
writer.WriteStartElement(\"Key\");
keySerializer.Serialize(writer,key);
writer.WriteEndElement;
writer.WriteStartElement(\"Value\");
TValuevalue=this[key];
valueSerializer.Serialize(writer,value); [Page]
writer.WriteEndElement;
}
}
#endregion
}
}
最新评论