Não vejo uma boa abordagem com a notação don em string, porque tem mais problemas com coleções do que com a abordagem genérica:
Por exemplo
Persion.Friends.Name
- Qual elemento é array nesta cadeia?
- Você deve aplicar conversão explícita para elementos de coleção (possível local de bugs)
Os métodos genéricos são mais confiáveis no suporte e uso:
var friends = await GetFieldValue<Person, Friend[]>("avi", x => x.Friends);
var names = friends.Select(x=>x.Name).ToArray();