让Dictionary支持序列化和反序列化

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);
        }
    }
}
posted @ 2025-03-24 19:47  cannedmint  阅读(12)  评论(0)    收藏  举报