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#