Пример #1
0
        public Serialization(T obj)
        {
            classType = typeof(T);
            Parent    = new _ItemTree();
            Serialiaze(classType, obj, Parent);

            //Deserialize(obj, )
        }
Пример #2
0
        public _XMLSerialization(string startElement, _ItemTree tree)
        {
            _xmlString      = "";
            _startElement   = startElement;
            _endMainElement = "</" + startElement + ">";

            Parent = tree;

            FillSubtreeList();
            Header = "<" + _startElement + mainLinks;

            AddHeader();
            ConvertTreeToXML(Parent, startElement, 0);
        }
Пример #3
0
        private _ItemTree GetCollectionSubTree(string collectionName, int idx, _ItemTree Parent)
        {
            int i = 0;

            {
                foreach (_ItemTree tree in Parent.subTrees)
                {
                    if (tree.ParentName == collectionName)
                    {
                        if (i == idx)
                        {
                            return(tree);
                        }
                        else
                        {
                            i++;
                        }
                    }
                }
            }
            return(null);
        }
Пример #4
0
        /// <summary>
        /// Serialization method fills the tree
        /// </summary>
        /// <param name="type">Type of object to serialize</param>
        /// <param name="obj">The main object to serialize</param>
        /// <param name="itemTree">Tree to fill</param>
        private void Serialiaze(Type type, object obj, _ItemTree itemTree)
        {
            if (itemTree.ParentName == "")
            {
                itemTree.ParentName = "Master";
            }
            itemTree.SelfName = type.Name.ToString();
            _ExcludeMembers excludeMembers = new _ExcludeMembers();

            itemTree.Collections = GetCollections(type, obj, excludeMembers);
            itemTree.Fields      = GetFields(type, obj, excludeMembers);
            itemTree.Properties  = GetProperties(type, obj, excludeMembers);

            Type   subType;
            string assemblyName;

            foreach (_Item item in itemTree.Fields)
            {
                int dotIdx = item.itemValue.LastIndexOf(".");
                if (dotIdx >= 0)
                {
                    assemblyName = item.itemValue.Substring(0, item.itemValue.LastIndexOf("."));
                    subType      = Type.GetType(item.itemValue + ", " + assemblyName);
                    if (subType != null)
                    {
                        itemTree.subTrees.Add(new _ItemTree(item.itemName));
                        FieldInfo field = GetFieldInfo(item.itemName, type);
                        Serialiaze(subType, field.GetValue(obj), itemTree.subTrees[itemTree.subTrees.Count - 1]);
                    }
                }
            }

            foreach (_Item item in itemTree.Properties)
            {
                int dotIdx = item.itemValue.LastIndexOf(".");
                if (dotIdx >= 0)
                {
                    assemblyName = item.itemValue.Substring(0, item.itemValue.LastIndexOf("."));
                    subType      = Type.GetType(item.itemValue + ", " + assemblyName);
                    if (subType != null)
                    {
                        itemTree.subTrees.Add(new _ItemTree(item.itemName));
                        PropertyInfo prop = GetPropertyInfo(item.itemName, type);
                        Serialiaze(subType, prop.GetValue(obj), itemTree.subTrees[itemTree.subTrees.Count - 1]);
                    }
                }
            }

            foreach (_Collection collection in itemTree.Collections)
            {
                int i = 0;
                foreach (string item in collection.Items)
                {
                    int dotIdx = item.LastIndexOf(".");
                    if (dotIdx >= 0)
                    {
                        assemblyName = item.Substring(0, item.LastIndexOf("."));
                        subType      = Type.GetType(item + ", " + assemblyName);
                        if (subType != null)
                        {
                            itemTree.subTrees.Add(new _ItemTree(collection.collectionName));
                            object itemObject = GetObjectFromCollection(type, obj, collection.collectionName, i);
                            Serialiaze(subType, itemObject, itemTree.subTrees[itemTree.subTrees.Count - 1]);
                        }
                    }
                    i++;
                }
            }
        }
Пример #5
0
        private void ConvertTreeToXML(_ItemTree tree, string ParentName, int depth)
        {
            if (tree.ParentName != "Master" && ParentName != "")
            {
                WriteStartElement(ParentName, depth);
            }

            foreach (_Collection collection in tree.Collections)
            {
                if (!SubtreeNames.Contains(collection.collectionName))
                {
                    foreach (string collitem in collection.Items)
                    {
                        WriteElementString(collection.collectionName, collitem, depth);
                    }
                }
                else
                {
                    WriteStartElement(collection.collectionName, depth + 2);
                    depth += 2;
                    int idx = 0;
                    foreach (string collectionItem in collection.Items)
                    {
                        _ItemTree subtree = GetCollectionSubTree(collection.collectionName, idx, tree);
                        if (subtree != null)
                        {
                            ConvertTreeToXML(subtree, subtree.SelfName, depth);
                        }
                        else
                        {
                            throw new Exception("Subtree wasn't found for collection!");
                        }
                        idx++;
                    }
                    depth -= 2;
                    WriteEndElement(collection.collectionName, depth + 2);
                }
            }

            foreach (_Item field in tree.Fields)
            {
                if (!SubtreeNames.Contains(field.itemName))
                {
                    WriteElementString(field.itemName, field.itemValue, depth);
                }
                else
                {
                    depth += 2;
                    _ItemTree subtree = null;
                    foreach (_ItemTree tr in tree.subTrees)
                    {
                        if (tr.ParentName == field.itemName)
                        {
                            subtree = tr;
                            break;
                        }
                    }
                    if (subtree != null)
                    {
                        ConvertTreeToXML(subtree, field.itemName, depth);
                    }
                    depth -= 2;
                }
            }

            foreach (_Item property in tree.Properties)
            {
                if (!SubtreeNames.Contains(property.itemName))
                {
                    WriteElementString(property.itemName, property.itemValue, depth);
                }
                else
                {
                    depth += 2;
                    _ItemTree subtree = null;
                    foreach (_ItemTree tr in tree.subTrees)
                    {
                        if (tr.ParentName == property.itemName)
                        {
                            subtree = tr;
                            break;
                        }
                    }
                    if (subtree != null)
                    {
                        ConvertTreeToXML(subtree, property.itemName, depth);
                    }
                    depth -= 2;
                }
            }

            if (ParentName != "")
            {
                WriteEndElement(ParentName, depth);
            }
        }