【发布时间】:2019-06-18 14:43:59
【问题描述】:
.NET/Google 目录 API
我正在使用目录 API 中的一些属性。
例如,在手机上,我可以这样做:
System.Collections.Generic.IList <Google.Apis.Admin.Directory.directory_v1.Data.UserPhone> phone = results.Phones
我会得到一个与用户关联的电话号码列表。因此,这与迄今为止我正在使用的所有其他对象一起工作,直到我遇到目录 API 中似乎是“UserLocation”的“位置”。当我调用 getUser() 时,我确实验证了对象看起来与位置 json 匹配。
这一行:
System.Collections.Generic.IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation> loc = results.Locations;
无效/无法编译:
"不能将类型'object'隐式转换为 'System.Collections.Generic.IList'。”
当我在 API 中检查 getUser 的结果时,该字段没有像其他字段(例如电话)那样的类型,它是通用的 "object {Newtonsoft.JSon.linq.JArray}"
没什么大不了的,我尝试使用以下方法手动转换 JSON 数组:(隐式输入,所以我确保我有正确的对象) System.Collections.Generic.IList 位置 = JsonConvert.DeserializeObject(results.Locations.ToString());
这也不编译:
"不能隐式转换类型 'Google.Apis.Admin.Directory.directory_v1.Data.UserLocation' 到 'System.Collections.Generic.IList'。 存在显式转换(您是否缺少演员表?)”
我在谷歌管理面板中没有看到多个位置,所以我认为它可能误报为一个数组,所以我尝试了这一行:
Google.Apis.Admin.Directory.directory_v1.Data.UserLocation location = (Google.Apis.Admin.Directory.directory_v1.Data.UserLocation)results.Locations;
编译正常/没有错误或警告。但是运行时我得到:
System.InvalidCastException: '无法转换类型的对象 'Newtonsoft.Json.Linq.JArray 输入 Google.Apis.Admin.Directory.directory_v1.Data.UserLocation;'
首先,这看起来像是 Google .Net API 中的一个错误,我将针对它开一个错误票。但我现在需要在短期内克服这个问题。如何将此对象转换为 UserLocation[] 类型?
【问题讨论】:
-
给你一个小提示,你可以使用 using 语句而不是每次都编写 System.Collections.Generic,如果由于某些愚蠢的原因你有一个模棱两可的名字,你可以给类型起别名
-
是的,当我处理这个问题时,我强烈键入了对象以确保我使用相同的对象进行反序列化(我提到它没有必要)。通常我不这样做,但我用它来试图消除所有可能的问题......但你是对的。
标签: c# json.net google-directory-api