c# - 无法序列化流数据asp .net core
问题描述
试图从 HTTP 响应中反序列化对象。响应流以 json 格式返回信息,我已经检查过它在在线反序列化器中是否有效。我从 API 框架中获得了对象类,所以我认为应该为响应配置所有属性。代码:
var request = new HttpRequestMessage(HttpMethod.Get,
"api_url");
var client = _clientFactory.CreateClient();
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
using var responseStream = await response.Content.ReadAsStreamAsync();
var reponseString = await response.Content.ReadAsStringAsync();
var data = await JsonSerializer.DeserializeAsync<IEnumerable<Tournament>>(responseStream);
}
else
{
GetBranchesError = true;
}
我看到 responseString 中的信息是正确的,但数据对象始终为空。奇怪的部分是它部分工作,因为它显示了 responseStream 中有多少对象,但所有对象属性都是空值。还尝试将流位置设置为 0 - 没有帮助。知道我在反序列化这些对象方面做错了什么吗?使用的解串器 - System.Text.Json;项目asp .net core 3.1
解决方案
问题是您在 JSON 数组中查找的属性实际上包含在一个名为“比赛”的对象中。当您像这样很好地格式化 JSON 字符串时,会更容易注意到:
[
{
"tournament": {
"id": 1,
"name": "name1",
...
}
},
{
"tournament": {
"id": 2,
"name": "name2",
...
}
}
]
要反序列化,我建议您制作一个包装类来处理它:
public class TournamentItem
{
[JsonPropertyName("tournament")]
public Tournament Tournament { get; set; }
}
然后反序列化到那个类:
var data = await JsonSerializer.DeserializeAsync<IEnumerable<TournamentItem>>(responseStream);
现在data.Tournament
将包含所有属性。
Spam
例如,您的属性中可能仍然存在一些问题。JSON 字符串具有null
as 值,但该属性不可为空 - 我没有检查您的所有属性。DeserializeAsync
会抛出一个错误并告诉你。
推荐阅读
- python - 在调试模式下运行 Flask 应用程序不提供 IP 或调试器 PIN 或任何请求详细信息
- apache - .htaccess - 代码块的顺序是否起作用?
- sql-server - 在另一台 PC 上使用 SQL Server 数据库运行我的 WinForms 项目
- android - Android-studio:无法找到 adb
- php - PHP 随机分配人员到一个团队
- pypi - 是否可以用我自己的包替换具有特定名称的现有 pip 包?
- syntax - 如何使用 Hugo 嵌套短代码?省略了原始 HTML
- java - 如何使用 redisson 并保持微服务架构紧凑
- ios - 透明导航栏 iOS 13
- sql - 如何在 CASE 语句计算中对重复行求和