.NET / Google目录API
我正在使用目录API中的一些属性。
例如,在电话上,我可以执行以下操作:
System.Collections.Generic.IList <Google.Apis.Admin.Directory.directory_v1.Data.UserPhone> phone = results.Phones
然后我将获得与该用户关联的电话号码列表。因此,这与到目前为止我正在使用的所有其他对象一起工作,直到遇到目录API中似乎是“ UserLocation”的“ location”。我确实在调用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管理控制台中没有看到多个位置,因此我认为它可能会误报为数组,因此我尝试了以下行:
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 []类型?
答案 0 :(得分:0)
找到了答案,这是一种用于将对象反序列化为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());