private static UIDBInclude GetAttribute(FieldInfo fI) { UIDBInclude attrib = (UIDBInclude)Attribute.GetCustomAttribute(fI, typeof(UIDBInclude)); return(attrib); }
private static UIDBInclude GetAttribute(PropertyInfo pI) { UIDBInclude attrib = (UIDBInclude)Attribute.GetCustomAttribute(pI, typeof(UIDBInclude)); return(attrib); }
public static void Traverse(object obj, Action <string, object, MemoryBrowser.ElementType, UIDBInclude> callback) { // process fields if (obj is IList) { // traverse list foreach (object val in ((IList)obj)) { bool isManaged = IsManaged(val); MemoryBrowser.ElementType elemType = MemoryBrowser.GetElementType(val); callback(val.GetType().Name, val, elemType, null); //if (!isManaged) { // // not managed ==> all elements are part of the table // callback(obj.GetType().Name, val, elemType, null); //} else { // var attrib = GetAttribute(val); // if (attrib != null) { // callback(field.Name, val, elemType, attrib); // } //} } } else { bool isManaged = IsManaged(obj); // traverse object foreach (FieldInfo field in obj.GetType().GetFields()) { object val = field.GetValue(obj); MemoryBrowser.ElementType elemType = MemoryBrowser.GetElementType(val); if (!isManaged) { // not managed ==> all elements are part of the table callback(field.Name, val, elemType, null); } else { UIDBInclude attrib = GetAttribute(field); if (attrib != null) { callback(field.Name, val, elemType, attrib); } } } // process properties foreach (PropertyInfo prop in obj.GetType().GetProperties()) { object val = prop.GetValue(obj); MemoryBrowser.ElementType elemType = MemoryBrowser.GetElementType(obj); if (!isManaged) { // not managed ==> all elements are part of the table callback(prop.Name, val, elemType, null); } else { UIDBInclude attrib = GetAttribute(prop); if (attrib != null) { callback(prop.Name, val, elemType, attrib); } } } } }