/ Published in: C#
Original posted here: http://i-liger.com/article/xml-serializatsiya-generic-dictionary
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
[XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader xmlReader) { 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; ReadXml(xmlTextReader); xmlTextReader.Close(); stringReader.Close(); return result; } public void WriteXml(XmlWriter xmlWriter) { 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; 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; } }
URL: http://i-liger.com/article/xml-serializatsiya-generic-dictionary