c# 支持XML序列化的泛型 Dictionary

/// <summary>   
    /// 支持XML序列化的泛型 Dictionary   
    /// </summary>   
    /// <typeparam name="TKey"></typeparam>   
    /// <typeparam name="TValue"></typeparam>   
    [XmlRoot("SerializableDictionary")]   
    public class SerializableDictionary<TKey, TValue>   
        : Dictionary<TKey, TValue>, IXmlSerializable   
    {  
 
        #region 构造函数   
        public SerializableDictionary()   
            : base()   
        {   
        }   
        public SerializableDictionary(IDictionary<TKey, TValue> dictionary)   
            : base(dictionary)   
        {   
        }   
  
        public SerializableDictionary(IEqualityComparer<TKey> comparer)   
            : base(comparer)   
        {   
        }   
  
        public SerializableDictionary(int capacity)   
            : base(capacity)   
        {   
        }   
        public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)   
            : base(capacity, comparer)   
        {   
        }   
        protected SerializableDictionary(SerializationInfo info, StreamingContext context)   
            : base(info, context)   
        {   
        }  
        #endregion  
        #region IXmlSerializable Members   
        public System.Xml.Schema.XmlSchema GetSchema()   
        {   
            return null;   
        }   
        /// <summary>   
        /// 从对象的 XML 表示形式生成该对象   
        /// </summary>   
        /// <param name="reader"></param>   
        public void ReadXml(System.Xml.XmlReader reader)   
        {   
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));   
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));   
            bool wasEmpty = reader.IsEmptyElement;   
            reader.Read();   
            if (wasEmpty)   
                return;   
            while (reader.NodeType != System.Xml.XmlNodeType.EndElement)   
            {   
                reader.ReadStartElement("item");   
                reader.ReadStartElement("key");   
                TKey key = (TKey)keySerializer.Deserialize(reader);   
                reader.ReadEndElement();   
                reader.ReadStartElement("value");   
                TValue value = (TValue)valueSerializer.Deserialize(reader);   
                reader.ReadEndElement();   
                this.Add(key, value);   
                reader.ReadEndElement();   
                reader.MoveToContent();   
            }   
            reader.ReadEndElement();   
        }   
  
        /**/  
        /// <summary>   
        /// 将对象转换为其 XML 表示形式   
        /// </summary>   
        /// <param name="writer"></param>   
        public void WriteXml(System.Xml.XmlWriter writer)   
        {   
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));   
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));   
            foreach (TKey key in this.Keys)   
            {   
                writer.WriteStartElement("item");   
                writer.WriteStartElement("key");   
                keySerializer.Serialize(writer, key);   
                writer.WriteEndElement();   
                writer.WriteStartElement("value");   
                TValue value = this[key];   
                valueSerializer.Serialize(writer, value);   
                writer.WriteEndElement();   
                writer.WriteEndElement();   
            }   
        }  
        #endregion   
    } 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovelytigerphd/archive/2009/12/23/5065229.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值