【发布时间】:2020-05-01 18:52:20
【问题描述】:
试图从 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
【问题讨论】:
-
我在这里有点不确定,但我认为调用
ReadAsStringAsync()和 从流中读取是不可能的。这是读取同一数据流的两种方式,默认情况下,流并不适用于此。 -
如果您将
var reponseString = await response.Content.ReadAsStringAsync();向下移动一行,您可能会看到data不再为空,而reponseString现在为空 -
不,还是一样的结果
-
是的,我明白我的假设不正确。当您说“所有对象属性都是空值”时,您能否举例说明
reponseString包含的内容以及您的Tournament类的外观。听起来属性映射出了问题。 -
codeshare.io/GkLV0M - 不知道你是否想通过所有这些。最后 18 个实体我必须手动输入,所以那里可能会有一些错误。因此,如果有任何不匹配,则不会分配任何属性?那么反序列化器不应该抛出异常吗?
标签: c# json asp.net-core