예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <summary>
 /// Serialize the given node into an element.
 /// </summary>
 public abstract XElement Serialize(SerializationNode node, ISerializationNodeContainer parent);
예제 #6
0
 /// <summary>
 /// De-serialize the given element into a node.
 /// </summary>
 public abstract SerializationNode Deserialize(XElement element, ISerializationNodeContainer parent);
예제 #7
0
 /// <summary>
 /// Serialize the given node into an element.
 /// </summary>
 public abstract XElement Serialize(SerializationNode node, ISerializationNodeContainer parent);
예제 #8
0
 /// <summary>
 /// De-serialize the given element into a node.
 /// </summary>
 public abstract SerializationNode Deserialize(XElement element, ISerializationNodeContainer parent);