public class L6P2<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
XmlSerializer keyS = new XmlSerializer(typeof(TKey));
XmlSerializer valueS = new XmlSerializer(typeof(TValue));
//跳过根节点
reader.Read();
//判断如果不是结束节点就一直反序列化
while (reader.NodeType != XmlNodeType.EndElement)
{
TKey key = (TKey)keyS.Deserialize(reader);
TValue value = (TValue)valueS.Deserialize(reader);
this.Add(key, value );
}
//跳过结束节点,避免影响之后的数据读取
reader.Read();
}
public void WriteXml(XmlWriter writer)
{
XmlSerializer keyS = new XmlSerializer(typeof(TKey));
XmlSerializer valueS = new XmlSerializer(typeof(TValue));
foreach (KeyValuePair<TKey, TValue> kvp in this)
{
keyS.Serialize(writer, kvp.Key);
valueS.Serialize(writer, kvp.Value);
}
}
}