【问题标题】:UserLocation object conversion missing in directory API目录 API 中缺少 UserLocation 对象转换
【发布时间】: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


【解决方案1】:

找到了答案,这是将对象反序列化为 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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2015-11-01
    相关资源
    最近更新 更多