/// <summary> /// Deserialise an object from an Xml Element /// </summary> /// <param name="node">Serialied Node</param> /// <returns>Deserialised Object</returns> public T Deserialise(XmlNode node) { var output = new T(); if (node != null) { foreach (XmlElement nodeChildNode in node.ChildNodes) { if (SerialisableProperties.TryGetValue(nodeChildNode.Name, out PropertyInfo serialisableProperty)) { var value = Serialisers.Get(serialisableProperty.PropertyType).Deserialise(nodeChildNode); serialisableProperty.SetValue(output, value); } } } return(output); }
/// <summary> /// Serialise an object to an Xml Element /// </summary> /// <param name="source">Object to serialise</param> /// <param name="name">Node Name</param> /// <param name="doc">Reusable Xml Document</param> /// <returns>Serialied Node</returns> public XmlNode Serialise(T source, string name = "Configuration", XmlDocument doc = null) { doc = doc ?? new XmlDocument(); var node = doc.CreateElement(name); if (source == null) { return(node); } foreach (var serialisableProperty in SerialisableProperties.Values) { var value = serialisableProperty.GetValue(source); var element = Serialisers.Get(serialisableProperty.PropertyType) .Serialise(doc, serialisableProperty.Name, value); if (element != null) { node.AppendChild(element); } } return(node); }