Сериализация для 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();
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д