public override void Deserialize(Node node, string data) { TextReader tr = new StringReader(data); Dictionary<string, object> properties = new Dictionary<string, object>(); using(XmlReader xmlReader = new XmlTextReader(tr)) { xmlReader.ReadStartElement("root"); do { if (xmlReader.NodeType == XmlNodeType.Element) { string name = xmlReader.Name; if (xmlReader.Read()) { switch (xmlReader.NodeType) { case XmlNodeType.Text: properties.Add(name, xmlReader.ReadContentAs(xmlReader.ValueType, null)); break; case XmlNodeType.Element: List<object> objs = new List<object>(); while(xmlReader.Read() && xmlReader.NodeType != XmlNodeType.EndElement) { if (xmlReader.Name == "item") objs.Add(xmlReader.ReadElementContentAs(xmlReader.ValueType, null)); } properties.Add(name, objs.ToArray()); break; } } } } while(xmlReader.Read()); } UpdateNode (node, properties); }