目录 API 中缺少 UserLocation 对象转换

UserLocation object conversion missing in directory API

.NET/Google目录API

我正在使用目录 API.

中的一些属性

例如,在 phone 秒,我可以这样做:

System.Collections.Generic.IList <Google.Apis.Admin.Directory.directory_v1.Data.UserPhone> phone = results.Phones

我将获得与用户关联的 phone 号码列表。所以这与我目前正在使用的所有其他对象一起工作,直到我遇到 "location",它在目录 API 中似乎是 "UserLocation"。当我调用 getUser().

时,我确实验证了对象看起来与位置 json 匹配

这一行:

System.Collections.Generic.IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation> loc = results.Locations;

无效/不编译:

"Cannot implicitly convert type 'object' to 'System.Collections.Generic.IList'."

当我在 API 中检查 getUser 的结果时,该字段没有像其他字段(例如 phone)那样的类型,它是一个通用的 "object {Newtonsoft.JSon.linq.JArray}"

没什么大不了的,我试着用这个手动转换 JSON 数组:(隐式输入所以我确保我有正确的对象) System.Collections.Generic.IList 地点 = JsonConvert.DeserializeObject(results.Locations.ToString());

这也不编译:

"Cannot implicitly convert type 'Google.Apis.Admin.Directory.directory_v1.Data.UserLocation' to 'System.Collections.Generic.IList'. An explicit conversion exists (are you missing a cast?)"

我在 google 管理面板中没有看到多个位置,所以我认为它可能被误报为数组,所以我尝试了这一行:

Google.Apis.Admin.Directory.directory_v1.Data.UserLocation location = (Google.Apis.Admin.Directory.directory_v1.Data.UserLocation)results.Locations;

编译正常/没有错误或警告。但是当 运行 我得到:

System.InvalidCastException: 'Unable to cast object of type 'Newtonsoft.Json.Linq.JArray to type Google.Apis.Admin.Directory.directory_v1.Data.UserLocation;'

首先,这看起来像是 Google .Net API 中的错误,我将针对它打开一个错误票。但我现在需要在短期内克服这个问题。如何将此对象转换为 UserLocation[] 类型?

找到答案,这是将对象反序列化为 iList 的方法(强类型但不是必须这样做):

IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation> location = 
JsonConvert.DeserializeObject<IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation>>(results.Locations.ToString());