c# - HttpClient 未返回与我的模型匹配的 API 数据
问题描述
您好编写了一个连接到 API 的小型 Web 应用程序。
它正在连接到 API 并返回数据,如您在此处看到的:
astroTechItem= await Http.GetFromJsonAsync<AstroTechItem[]>("api/AstroTechItem/34");
它返回以下 JSON:
{
"objectId": 34,
"scopeId": 3,
"title": "solar telescope",
"completed": false
}
在我的应用程序中,我有这个模型:
private class AstroTechItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
我正在像这样反序列化:
JsonSerializer serializer = new JsonSerializer();
try
{
return serializer.Deserialize<AstroTechItem>(jsonReader);
}
catch(JsonReaderException)
{
Console.WriteLine("Invalid JSON.");
}
}
else
{
Console.WriteLine("HTTP Response was invalid and cannot be deserialised.");
}
但我的模型与 API 返回的不匹配。
我的控制台一直显示:Invalid JSON.
我需要联系 API 的制造商并让他们更改吗?
或者有没有办法让 JSON 适合我的模型?
我想不通。
谢谢!
解决方案
要将 json 反序列化为模型,模型的属性必须与 json 的属性匹配。或者您可以使用 json 属性名称注释模型。在您的情况下,没有任何属性匹配。
最简单的方法是更新模型以使其与外部 API 保持一致,如下所示:
private class AstroTechItem
{
public long ObjectId { get; set; }
public long ScopeId { get; set; }
public string Title { get; set; }
public bool Completed { get; set; }
}
否则,您可以注释模型:
private class AstroTechItem
{
[JsonProperty("objectId")]
public long Id { get; set; }
[JsonProperty("title")]
public string Name { get; set; }
[JsonProperty("isComplete")]
public bool Completed { get; set; }
}
推荐阅读
- ios - SwipeCellKit 滑动删除未被调用
- ios - 用户关闭应用程序时如何保持登录状态?斯威夫特 4
- google-sheets - 索引匹配/查找
- swift - Swift AnyObject 变量,使用或链接向下转换(as)来访问不同类的属性
- c# - 检查文本文件中是否存在文本
- android - 无法在 Android 上的 CMake 中链接 libCurl.a 静态库
- javascript - jQuery 过滤选择选项在 Safari 中不起作用(但在 Chrome 和 FF 中起作用)
- python - 如何使用 Python 获取信息框文本
- ios - iphone下载上的S3签名URL重定向失败
- windows - 当所有参数相同时限制一个 PS 脚本实例