Example #1
0
        protected virtual TObjectUnit VisitRoot(Type type, bool allowAddToQueue = true)
        {
            var rootUnit = RootObjUnit ?? NewObjectUnit();

            rootUnit.ObjType = type;

            RootObjUnit = rootUnit;

            if (allowAddToQueue)
            {
                ObjUnitsQueue.Enqueue(rootUnit);
            }

            return(rootUnit);
        }
Example #2
0
        protected virtual TObjectUnit VisitChild(TObjectUnit currentUnit, PropertyInfo propInfo, bool allowAddToQueue = true)
        {
            var subUnit = NewObjectUnit();

            subUnit.ObjType = propInfo.PropertyType;
            subUnit.Level   = currentUnit.Level + 1;

            currentUnit.SubUnits.Add(subUnit);

            if (allowAddToQueue &&
                subUnit.ObjType != typeof(string) &&
                !subUnit.ObjType.GetTypeInfo().IsPrimitive &&
                !subUnit.ObjType.GetTypeInfo().IsValueType)
            {
                ObjUnitsQueue.Enqueue(subUnit);
            }

            return(subUnit);
        }
Example #3
0
        protected virtual IEnumerable <TObjectUnit> VisitRootChilds()
        {
            while (ObjUnitsQueue.Count > 0)
            {
                var currentUnit = ObjUnitsQueue.Dequeue();

                var type     = currentUnit.ObjType;
                var typeInfo = type.GetTypeInfo();

                var properties = ExtractTypeProperties(type);

                properties = properties.Where(PropertyFilter);

                foreach (var propInfo in properties)
                {
                    VisitChild(currentUnit, propInfo);
                }
            }

            return(RootObjUnit.SubUnits.Cast <TObjectUnit>());
        }