目录API中缺少UserLocation对象转换

时间:2019-06-18 14:43:59

标签: c# json.net google-directory-api

.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 []类型?

1 个答案:

答案 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());