public ValueCrawler(object value, Type type, ICrawlToken parentToken, ObjectCrawler objectCrawler)
 {
     _value         = value;
     _type          = type;
     _parentToken   = parentToken;
     _objectCrawler = objectCrawler;
 }
        internal void Crawl(Type type, ICrawlToken token, object value)
        {
            if (_crawledItems.Contains(value))
            {
                return;
            }
            _crawledItems.Add(value);
            CrawlingType crawlingType = Configuration.CrawlingTypeDetection.DetectType(type, token);
            ICrawler     crawler;

            switch (crawlingType)
            {
            case CrawlingType.Reference:
                crawler = new ReferenceCrawler(value, type, token, this);
                break;

            case CrawlingType.Value:
                crawler = new ValueCrawler(value, type, token, this);
                break;

            case CrawlingType.Enumerable:
                crawler = new EnumerableCrawler(value, type, token, this);
                break;

            case CrawlingType.Dictionary:
                crawler = new DictionaryCrawler(value, type, token, this);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            crawler.Crawl();
        }
Example #3
0
 public FieldCrawler(object declaringValue, FieldInfo field, ICrawlToken parentToken, ObjectCrawler objectCrawler)
 {
     _declaringValue = declaringValue;
     _field          = field;
     _parentToken    = parentToken;
     _objectCrawler  = objectCrawler;
 }
Example #4
0
 public PropertyCrawler(object declaringValue, PropertyInfo property, ICrawlToken parentToken, ObjectCrawler objectCrawler)
 {
     _declaringValue = declaringValue;
     _property       = property;
     _parentToken    = parentToken;
     _objectCrawler  = objectCrawler;
 }
 internal void AcceptVisitors(ICrawlToken token)
 {
     foreach (IObjectGraphVisitor visitor in _visitors)
     {
         token.Accept(visitor);
     }
 }
 public virtual CrawlingType DetectType(Type type, ICrawlToken token)
 {
     if (IsValue(type))
     {
         return(CrawlingType.Value);
     }
     if (typeof(IDictionary).IsAssignableFrom(type))
     {
         return(CrawlingType.Dictionary);
     }
     if (typeof(IEnumerable).IsAssignableFrom(type))
     {
         return(CrawlingType.Enumerable);
     }
     return(CrawlingType.Reference);
 }
 protected CrawlToken(ICrawlToken parent)
 {
     Parent = parent;
 }
Example #8
0
 public EnumerableToken(ICrawlToken parent, Type type, object value) : base(parent)
 {
     Type   = type;
     _value = value;
 }
 public ReferenceToken(ICrawlToken parent, Type type, object value) : base(parent)
 {
     Type   = type;
     _value = value;
 }
Example #10
0
 public FieldToken(ICrawlToken parent, FieldInfo field, Func <object> valueResolver, Action <object> valueApplier) : base(parent)
 {
     _valueResolver = valueResolver;
     _valueApplier  = valueApplier;
     Field          = field;
 }
 public virtual IEnumerable <PropertyInfo> GetProperties(Type type, ICrawlToken crawlToken)
 {
     return(type.GetProperties());
 }
Example #12
0
 public virtual IEnumerable <FieldInfo> GetFields(Type type, ICrawlToken crawlToken)
 {
     return(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance));
 }
Example #13
0
 public DictionaryToken(ICrawlToken parent, Type type, object value) : base(parent)
 {
     Type   = type;
     _value = value;
 }
Example #14
0
 public PropertyToken(ICrawlToken parent, PropertyInfo property, Func <object> valueResolver, Action <object> valueApplier) : base(parent)
 {
     _valueResolver = valueResolver;
     _valueApplier  = valueApplier;
     Property       = property;
 }