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(); }
public FieldCrawler(object declaringValue, FieldInfo field, ICrawlToken parentToken, ObjectCrawler objectCrawler) { _declaringValue = declaringValue; _field = field; _parentToken = parentToken; _objectCrawler = objectCrawler; }
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; }
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; }
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()); }
public virtual IEnumerable <FieldInfo> GetFields(Type type, ICrawlToken crawlToken) { return(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)); }
public DictionaryToken(ICrawlToken parent, Type type, object value) : base(parent) { Type = type; _value = value; }
public PropertyToken(ICrawlToken parent, PropertyInfo property, Func <object> valueResolver, Action <object> valueApplier) : base(parent) { _valueResolver = valueResolver; _valueApplier = valueApplier; Property = property; }