/// <summary> /// De-serialize the given element into a node. /// </summary> private static SerializationNode Deserialize(XElement element, ISerializationNodeContainer container) { var serializer = Serializers.FirstOrDefault(x => x.CanDeserialize(element)); if (serializer == null) { throw new SerializationException(string.Format("Cannot deserialize element {0}", element.Name)); } var node = serializer.Deserialize(element, container); if (container != null) { node = container.Add(node); } foreach (var child in element.Elements()) { var nodeAsContainer = node as ISerializationNodeContainer; if (nodeAsContainer == null) { throw new SerializationException(string.Format("Node {0} in not a valid container", node)); } Deserialize(child, nodeAsContainer); } return(node); }
/// <summary> /// De-serialize the given element into a node. /// </summary> public override SerializationNode Deserialize(XElement element, ISerializationNodeContainer parent) { var node = new T(); properties.ForEach(x => x.Load(element, node)); return(node); }
/// <summary> /// Serialize the given node into an element. /// </summary> public override XElement Serialize(SerializationNode node, ISerializationNodeContainer parent) { var element = new XElement(elementName); if (parent == null) { foreach (var attr in addNamespaces) { element.Add(new XAttribute(XNamespace.Xmlns + attr.Prefix, attr.Namespace)); } } properties.ForEach(x => x.Store(element, node)); return(element); }
/// <summary> /// Serialize the given node into an element. /// </summary> private static XElement Serialize(SerializationNode node, ISerializationNodeContainer parentNode, XElement parent) { var element = Serializers.First(x => x.CanSerialize(node)).Serialize(node, parentNode); if (parent != null) { parent.Add(element); } var nodeAsContainer = node as ISerializationNodeContainer; if (nodeAsContainer != null) { foreach (var childNode in nodeAsContainer.Children) { Serialize(childNode, nodeAsContainer, element); } } return(element); }
/// <summary> /// Serialize the given node into an element. /// </summary> public abstract XElement Serialize(SerializationNode node, ISerializationNodeContainer parent);
/// <summary> /// De-serialize the given element into a node. /// </summary> public abstract SerializationNode Deserialize(XElement element, ISerializationNodeContainer parent);