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