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