码迷,mamicode.com
首页 > 其他好文 > 详细

支持 XML 序列化的 Dictionary

时间:2015-07-20 15:42:21      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Xml.Serialization;
  6 using System.Xml;
  7 using System.Xml.Schema;
  8 using System.Runtime.Serialization;
  9 
 10     /// <summary>
 11     /// 标题:支持 XML 序列化的 Dictionary
 12     /// </summary>
 13     /// <typeparam name="TKey"></typeparam>
 14     /// <typeparam name="TValue"></typeparam>
 15     [XmlRoot("SerializableDictionary")]
 16     public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
 17     {
 18 
 19         public SerializableDictionary()
 20             : base()
 21         {
 22         }
 23         public SerializableDictionary(IDictionary<TKey, TValue> dictionary)
 24             : base(dictionary)
 25         {
 26         }
 27 
 28         public SerializableDictionary(IEqualityComparer<TKey> comparer)
 29             : base(comparer)
 30         {
 31         }
 32 
 33         public SerializableDictionary(int capacity)
 34             : base(capacity)
 35         {
 36         }
 37         public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
 38             : base(capacity, comparer)
 39         {
 40         }
 41         protected SerializableDictionary(SerializationInfo info, StreamingContext context)
 42             : base(info, context)
 43         {
 44         }
 45 
 46 
 47         public System.Xml.Schema.XmlSchema GetSchema()
 48         {
 49             return null;
 50         }
 51         /// <summary>
 52         /// 从对象的 XML 表示形式生成该对象
 53         /// </summary>
 54         /// <param name="reader"></param>
 55         public void ReadXml(System.Xml.XmlReader reader)
 56         {
 57             XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
 58             XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
 59             bool wasEmpty = reader.IsEmptyElement;
 60             reader.Read();
 61             if (wasEmpty)
 62                 return;
 63             while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
 64             {
 65                 reader.ReadStartElement("item");
 66                 reader.ReadStartElement("key");
 67                 TKey key = (TKey)keySerializer.Deserialize(reader);
 68                 reader.ReadEndElement();
 69                 reader.ReadStartElement("value");
 70                 TValue value = (TValue)valueSerializer.Deserialize(reader);
 71                 reader.ReadEndElement();
 72                 this.Add(key, value);
 73                 reader.ReadEndElement();
 74                 reader.MoveToContent();
 75             }
 76             reader.ReadEndElement();
 77         }
 78 
 79         /**/
 80         /// <summary>
 81         /// 将对象转换为其 XML 表示形式
 82         /// </summary>
 83         /// <param name="writer"></param>
 84         public void WriteXml(System.Xml.XmlWriter writer)
 85         {
 86             XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
 87             XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
 88             foreach (TKey key in this.Keys)
 89             {
 90                 writer.WriteStartElement("item");
 91                 writer.WriteStartElement("key");
 92                 keySerializer.Serialize(writer, key);
 93                 writer.WriteEndElement();
 94                 writer.WriteStartElement("value");
 95                 TValue value = this[key];
 96                 valueSerializer.Serialize(writer, value);
 97                 writer.WriteEndElement();
 98                 writer.WriteEndElement();
 99             }
100         }
101 
102     }

 

支持 XML 序列化的 Dictionary

标签:

原文地址:http://www.cnblogs.com/ziranquliu/p/4661317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!