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; } }