public virtual void Visit(ObjectVisitor visitor) { if (o == null || o.GetType().Equals(typeof (object))) return; Markable markable = o as Markable; if (markable != null && markable.IsProcessed) return; if (markable != null) markable.IsProcessed = true; @class.EachField(delegate(FieldInfo fieldInfo) { var reflectedObject = new ReflectedObject(fieldInfo.GetValue(o), leafRegister); if (TreatAsPrimitive(fieldInfo.FieldType) || leafRegister.IsIgnored(fieldInfo.FieldType)) visitor.Accept(reflectedObject); else reflectedObject.Visit(visitor); }); visitor.Accept(this); }