如何解决使用 Webclient 的 API 中的 JsonConvert.DeserializeObject 对象可能是 2 种对象类型之一
我正在尝试使用 C# .Net Core 3.1 访问 FitBit API
https://dev.fitbit.com/build/reference/web-api/sleep/
但是,对于睡眠数据,它可以返回 SleepJSON 对象或具有重试持续时间的 Meta 对象
{
"Meta": {
"retryDuration": 3000,"state": "pending"
}
}
如果我不必处理这个 Meta 对象,我会简单地完成这个,只要我没有得到另一个就可以工作。
var response = JsonConvert.DeserializeObject<SleepJSON>(await wc.DownloadStringTaskAsync($"{url}"));
我对 API 工作还很陌生,并尝试过使用动态,但是在尝试确定返回的内容,然后将它们转换为要使用的对象类型时,我失败了。
我真的不知道如何处理 2 种可能的返回对象类型的情况。
解决方法
当您不知道要获取哪个对象时(非常好的 API 要么避免这种行为,要么使用标头来提示您如何阅读内容),而不是完全反序列化内容,您可以解析响应进入 JObject,检查顶级属性,并根据其存在选择适当的路径。
var json = await wc.DownloadStringTaskAsync($"{url}");
var jObject = JObject.Parse(json);
if (jObject.Property("meta") != null)
{
// handle meta here
meta = jObject.ToObject<MetaResponse>();
}
else
{
// you can fully deserialize the normal path here
response = jObject.ToObject<SleepJSON>();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。