private bool TryBinding(IPathStack path, out object obj)
		{
			if (path.IsAtEnd)
			{
				obj = null;
				return false;
			}
			int index = path.Index;
			if (_emptyPath != null && _emptyPath.TryMapping(null, path))
			{
				obj = _emptyValueSet ? _emptyValue : (DefaultValue != null ? DefaultValue : (BindingTargetType.IsValueType ? Activator.CreateInstance(BindingTargetType) : null));
				return true;
			}
			path.ReverseToIndex(index);
			if (_deserializer != null)
			{
				return _deserializer(path, out obj);
			}
			else
			{
				string nextPath = path.Peek();
				if (Extension != null)
				{
					if (!nextPath.EndsWith(Extension, StringComparison.CurrentCultureIgnoreCase))
					{
						obj = null;
						return false;
					}
					nextPath = nextPath.Substring(0, nextPath.Length - Extension.Length);
				}
				bool f = SerializationHelper.TryDeserialize(nextPath, BindingTargetType, out obj);
				if (f)
				{
					path.Pop();
					return true;
				}
				else
					return false;
			}
		}