Exemplo n.º 1
0
        public IElement GetRootElement <T>(T objectToSerialize)
        {
            type = typeof(T);

            var rootElement = new CompositeElement();

            rootElement.Name = type.Name;

            RecursiveTreeBuilder(rootElement, type, objectToSerialize);

            return(rootElement);
        }
Exemplo n.º 2
0
        private void RecursiveTreeBuilder(CompositeElement parentElement, Type type, object objectToSerialize)
        {
            foreach (var property in type.GetProperties())
            {
                if (property.PropertyType.IsPrimitive || property.PropertyType.Equals(typeof(string)))
                {
                    var element = new Element();
                    element.Name  = property.Name;
                    element.Value = property.GetValue(objectToSerialize, null).ToString();

                    parentElement.ChildElements.Add(element);
                }
                else
                {
                    if (IsEnumerable(property))
                    {
                        var element = new CompositeElement();
                        element.Name         = property.Name;
                        element.IsCollection = true;

                        var enumerableProperty = property.GetValue(objectToSerialize, null) as IEnumerable;
                        foreach (var value in enumerableProperty)
                        {
                            var childElement = new Element();
                            childElement.Name  = element.Name + "Item";
                            childElement.Value = value.ToString();
                            element.ChildElements.Add(childElement);
                        }

                        parentElement.ChildElements.Add(element);
                    }
                    else
                    {
                        var element = new CompositeElement();
                        element.Name = property.Name;
                        parentElement.ChildElements.Add(element);

                        RecursiveTreeBuilder(element, property.PropertyType, property.GetValue(objectToSerialize, null));
                    }
                }
            }
        }