Your code shows a different problem than your description.
About your code:
Your first post shows variable "result" is a List. But in your second post you access that variable as an array.
About dynamic fields:
Look into
.net reflection. It allows you to look up the value of class member, given its name.
Essentially you have an object -one of the GoogleAdsRow that is in your list- and a name -which comes from FieldMask-. With reflection you can get its value. Actually you need to do this twice. Using your last code: Assuming an instance of Google AdsRow, first you use reflection to get the property with name "CustomerClient". Store its value in a variable of type "object". Then use reflection on THAT object, and retrieve the property named "ClientCustomer".
If reflection is too slow for you (you expect 10,000s of rows), check out package FastMember, which allows the same - but much faster.
.net reflection goes way beyond the intention of this forum, you should check out Stackoverflow.
I have two remarks though:
1. When the query returns zero rows, FieldMask probably has no fields. Make sure to check it.
2. The GoogleAds package does some name wrangling, I am not sure FieldMask contains names from the raw result of the API, or contains similar wrangled names.
You may want to reconsider the idea of dynamic fields. If you only have a dozen, or dozens of report types, it's probably easier to hardcode every one of these reports.