Non vedo un buon approccio con la notazione don nella stringa, perché ha più problemi con le raccolte rispetto all'approccio generico:
Ad esempio Persion.Friends.Name
- Quale elemento è array in questa catena?
- Dovresti applicare la conversione esplicita per gli elementi della raccolta (possibile luogo di bug)
I metodi generici sono più affidabili nel supporto e nell'utilizzo di:
var friends = await GetFieldValue<Person, Friend[]>("avi", x => x.Friends);
var names = friends.Select(x=>x.Name).ToArray();