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

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

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

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

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

textual
Листинг программы
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
 
namespace Ghost
{
    [XmlRoot("dictionary")]
    public class GhostDictionary<TKey, TValue> : 
        Dictionary<TKey, TValue>, 
        IXmlSerializable
    {
        public GhostDictionary()
        {
 
        }
 
        public GhostDictionary(IDictionary<TKey, TValue> dictionary)
            : base(dictionary)
        {
 
        }
        
        public GhostDictionary(IEqualityComparer<TKey> comparer)
            : base(comparer)
        {
 
        }
        
        public GhostDictionary(int capacity)
            : base(capacity)
        {
 
        }
        
        public GhostDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
            : base(dictionary, comparer)
        {
 
        }
        
        public GhostDictionary(int capacity, IEqualityComparer<TKey> comparer)
            : base(capacity, comparer)
        {
 
        }
        
        protected GhostDictionary(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
 
        }
 
        public XmlSchema GetSchema()
        {
            return null;
        }
 
        public void ReadXml(XmlReader reader)
        {
            XmlSerializer keyDeserializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueDerializer = new XmlSerializer(typeof(TValue));
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.EndElement &&
                    reader.Name == "item")
                {
                    reader.Read();
                }
                if (reader.NodeType == XmlNodeType.EndElement &&
                    reader.Name == "dictionary")
                {
                    break;
                }
                if (reader.Name != "item")
                {
                    throw new XmlException("Invalid XML");
                }
                reader.Read();
                if (reader.Name != "key")
                {
                    throw new XmlException("Invalid XML");
                }
                reader.Read();
                TKey key = (TKey)keyDeserializer.Deserialize(reader);
                reader.Read();
                if (reader.Name != "value")
                {
                    throw new XmlException("Invalid XML");
                }
                reader.Read();
                TValue value = (TValue)valueDerializer.Deserialize(reader);
                this.Add(key, value);
            }
        }
 
        public void WriteXml(XmlWriter writer)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerialier = new XmlSerializer(typeof(TValue));
            foreach (KeyValuePair<TKey, TValue> pair in this)
            {
                writer.WriteStartElement("item");
                writer.WriteStartElement("key");
                keySerializer.Serialize(writer, pair.Key);
                writer.WriteEndElement();
                writer.WriteStartElement("value");
                valueSerialier.Serialize(writer, pair.Value);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }
    }
}

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы