Сериализация для Dictionary> - C#

Узнай цену своей работы

Формулировка задачи:

как сериализовать в XML Dictionary<DateTime, List<string>>?

Решение задачи: «Сериализация для Dictionary

textual
Листинг программы
  1. using System.Collections.Generic;
  2. using System.Runtime.Serialization;
  3. using System.Xml;
  4. using System.Xml.Schema;
  5. using System.Xml.Serialization;
  6.  
  7. namespace Ghost
  8. {
  9.     [XmlRoot("dictionary")]
  10.     public class GhostDictionary<TKey, TValue> :
  11.         Dictionary<TKey, TValue>,
  12.         IXmlSerializable
  13.     {
  14.         public GhostDictionary()
  15.         {
  16.  
  17.         }
  18.  
  19.         public GhostDictionary(IDictionary<TKey, TValue> dictionary)
  20.             : base(dictionary)
  21.         {
  22.  
  23.         }
  24.        
  25.         public GhostDictionary(IEqualityComparer<TKey> comparer)
  26.             : base(comparer)
  27.         {
  28.  
  29.         }
  30.        
  31.         public GhostDictionary(int capacity)
  32.             : base(capacity)
  33.         {
  34.  
  35.         }
  36.        
  37.         public GhostDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
  38.             : base(dictionary, comparer)
  39.         {
  40.  
  41.         }
  42.        
  43.         public GhostDictionary(int capacity, IEqualityComparer<TKey> comparer)
  44.             : base(capacity, comparer)
  45.         {
  46.  
  47.         }
  48.        
  49.         protected GhostDictionary(SerializationInfo info, StreamingContext context)
  50.             : base(info, context)
  51.         {
  52.  
  53.         }
  54.  
  55.         public XmlSchema GetSchema()
  56.         {
  57.             return null;
  58.         }
  59.  
  60.         public void ReadXml(XmlReader reader)
  61.         {
  62.             XmlSerializer keyDeserializer = new XmlSerializer(typeof(TKey));
  63.             XmlSerializer valueDerializer = new XmlSerializer(typeof(TValue));
  64.             while (reader.Read())
  65.             {
  66.                 if (reader.NodeType == XmlNodeType.EndElement &&
  67.                     reader.Name == "item")
  68.                 {
  69.                     reader.Read();
  70.                 }
  71.                 if (reader.NodeType == XmlNodeType.EndElement &&
  72.                     reader.Name == "dictionary")
  73.                 {
  74.                     break;
  75.                 }
  76.                 if (reader.Name != "item")
  77.                 {
  78.                     throw new XmlException("Invalid XML");
  79.                 }
  80.                 reader.Read();
  81.                 if (reader.Name != "key")
  82.                 {
  83.                     throw new XmlException("Invalid XML");
  84.                 }
  85.                 reader.Read();
  86.                 TKey key = (TKey)keyDeserializer.Deserialize(reader);
  87.                 reader.Read();
  88.                 if (reader.Name != "value")
  89.                 {
  90.                     throw new XmlException("Invalid XML");
  91.                 }
  92.                 reader.Read();
  93.                 TValue value = (TValue)valueDerializer.Deserialize(reader);
  94.                 this.Add(key, value);
  95.             }
  96.         }
  97.  
  98.         public void WriteXml(XmlWriter writer)
  99.         {
  100.             XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
  101.             XmlSerializer valueSerialier = new XmlSerializer(typeof(TValue));
  102.             foreach (KeyValuePair<TKey, TValue> pair in this)
  103.             {
  104.                 writer.WriteStartElement("item");
  105.                 writer.WriteStartElement("key");
  106.                 keySerializer.Serialize(writer, pair.Key);
  107.                 writer.WriteEndElement();
  108.                 writer.WriteStartElement("value");
  109.                 valueSerialier.Serialize(writer, pair.Value);
  110.                 writer.WriteEndElement();
  111.                 writer.WriteEndElement();
  112.             }
  113.         }
  114.     }
  115. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы