private bool Dispatch()

in src/Elastic.Transport/Responses/Dynamic/DynamicValue.cs [377:440]


	private bool Dispatch(out object result, string name)
	{
		if (!HasValue)
		{
			result = NullValue;
			return true;
		}

		if (Value is IDictionary<string, object> d)
		{
			result = d.TryGetValue(name, out var r) ? SelfOrNew(r) : NullValue;
			return true;
		}
		if (Value is IDynamicMetaObjectProvider)
		{
			var dm = GetDynamicMember(Value, name);
			result = SelfOrNew(dm);
			return true;
		}
		if (Value is IDictionary ds)
		{
			result = ds.Contains(name) ? SelfOrNew(ds[name]) : NullValue;
			return true;
		}
		if (Value is IList l)
		{
			var projected = l
				.Cast<object>()
				.Select(i => SelfOrNew(i).Dispatch(out var o, name) ? o : null)
				.Where(i => i != null)
				.ToArray();
			result = SelfOrNew(projected);
			return projected.Length > 0;
		}
		if (Value is IList<object> lo)
		{
			var projected = lo
				.Select(i => SelfOrNew(i).Dispatch(out var o, name) ? o : null)
				.Where(i => i != null)
				.ToArray();
			result = SelfOrNew(projected);
			return projected.Length > 0;
		}
		if (Value is JsonElement e && e.ValueKind == JsonValueKind.Object)
		{
			if (e.TryGetProperty(name, out var r))
			{
				result = SelfOrNew(r);
				return true;
			}
		}
		if (Value is JsonElement a && a.ValueKind == JsonValueKind.Array)
		{
			var projected = a.EnumerateArray()
				.Select(i => SelfOrNew(i).Dispatch(out var o, name) ? o : null)
				.Where(i => i != null)
				.ToArray();
			result = SelfOrNew(projected);
			return projected.Length > 0;
		}

		result = NullValue;
		return true;
	}