public Serialization(T obj) { classType = typeof(T); Parent = new _ItemTree(); Serialiaze(classType, obj, Parent); //Deserialize(obj, ) }
public _XMLSerialization(string startElement, _ItemTree tree) { _xmlString = ""; _startElement = startElement; _endMainElement = "</" + startElement + ">"; Parent = tree; FillSubtreeList(); Header = "<" + _startElement + mainLinks; AddHeader(); ConvertTreeToXML(Parent, startElement, 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); }
/// <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++; } } }
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); } }