private bool DetermineRecursion() { if (IsSimple) { return(false); } if (_memberChain.Length < 3) { // Need at least 3 members for recursion: // Foo -> Foo.ChildFoo -> Foo.ChildFoo.ChildFoo return(false); } if (LeafMember.IsEnumerableElement()) { // Recurse on enumerable and complex type members, // not enumerable elements: return(false); } for (var i = _memberChain.Length - 2; i > 0; --i) { if (LeafMember == _memberChain[i]) { return(true); } } return(false); }
private bool CreateNonDictionaryChildMembers(Type sourceType) { // If this DictionaryTargetMember represents an object-typed dictionary // entry and we're mapping from a source of type object, we switch from // mapping to flattened entries to mapping entire objects: return(HasObjectEntries && LeafMember.IsEnumerableElement() && (MemberChain[Depth - 2] == _rootDictionaryMember.LeafMember) && (sourceType == typeof(object))); }