为什么要实现序列化:让Dictionary类支持序列化的实现方法



我们经常在开发中碰到要序列化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
}
}
Tags:  对象序列化 java序列化 序列化 为什么要实现序列化

延伸阅读

最新评论

发表评论