Example #1
0
        private bool ContainsPath(JToken token, IExpressionChain selector)
        {
            switch (token.Type)
            {
            case JTokenType.Object:
            {
                var matchingChild = token.Children <JProperty>().FirstOrDefault(c => string.Equals(c.Name, selector.Current.Name, StringComparison.InvariantCultureIgnoreCase));
                if (matchingChild == null)
                {
                    return(false);
                }

                return(!selector.HasNext() || ContainsPath(matchingChild.Value, selector.Next));
            }

            case JTokenType.Array:
            {
                return(((JArray)token).All(child => ContainsPath(child, selector)));
            }

            default:
                return(true);
            }
        }
 public bool Contains(IExpressionChain chain)
 {
     return(chain == null || (chain.Current.Equals(Current) && (chain.Next == null || (Next != null && Next.Contains(chain.Next)))));
 }
 public static bool HasNext(this IExpressionChain chain) => chain?.Next != null;