Revision: 34457
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 22, 2010 18:15 by dzr_gregory
Initial Code
[XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader xmlReader) { XmlSerializer keyXmlSerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueXmlSerializer = new XmlSerializer(typeof(TValue)); if (xmlReader.IsEmptyElement) return; xmlReader.ReadStartElement("root"); while (xmlReader.NodeType != XmlNodeType.EndElement) { xmlReader.ReadStartElement("item"); xmlReader.ReadStartElement("key"); TKey key = (TKey)keyXmlSerializer.Deserialize(xmlReader); xmlReader.ReadEndElement(); xmlReader.ReadStartElement("value"); TValue value = (TValue)valueXmlSerializer.Deserialize(xmlReader); xmlReader.ReadEndElement(); this.Add(key, value); xmlReader.ReadEndElement(); } xmlReader.ReadEndElement(); } public SerializableDictionary<TKey, TValue> ReadFromString(string xmlString) { SerializableDictionary<TKey, TValue> result = null; StringReader stringReader = new StringReader(xmlString); XmlTextReader xmlTextReader = new XmlTextReader(stringReader); ReadXml(xmlTextReader); xmlTextReader.Close(); stringReader.Close(); return result; } public void WriteXml(XmlWriter xmlWriter) { XmlSerializer keyXMLSerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueXMLSerializer = new XmlSerializer(typeof(TValue)); foreach (TKey key in this.Keys) { xmlWriter.WriteStartElement("item"); xmlWriter.WriteStartElement("key"); keyXMLSerializer.Serialize(xmlWriter, key); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("value"); TValue value = this[key]; valueXMLSerializer.Serialize(xmlWriter, value); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } } public string SerializeToString() { string result = null; MemoryStream memoryStream = new MemoryStream(); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xmlTextWriter.Namespaces = true; WriteXml(xmlTextWriter); xmlTextWriter.Close(); memoryStream.Close(); result = Encoding.UTF8.GetString(memoryStream.GetBuffer()); result = result.Substring(result.IndexOf(Convert.ToChar(60))); result = result.Substring(0, (result.LastIndexOf(Convert.ToChar(62)) + 1)); result = "<root>" + result + "</root>"; return result; } }
Initial URL
http://i-liger.com/article/xml-serializatsiya-generic-dictionary
Initial Description
Original posted here: http://i-liger.com/article/xml-serializatsiya-generic-dictionary
Initial Title
SerializableDictionary using IXmlSerializable
Initial Tags
Initial Language
C#