使用HttpClient.GetFromJsonAsync()
或Content.ReadFromJsonAsync<T>()
时,某些属性无法正确解析。
Chrome调试器正确解析了UserSsid
属性:
但是HttpClient
没有:
- Blazor-客户端代码**
async Task WaitForExport(string location)
{
while (await periodicTimer.WaitForNextTickAsync())
{
var response = await Http.GetAsync(location, HttpCompletionOption.ResponseContentRead);
if (response != null && response.IsSuccessStatusCode)
{
var exportStatus = await response.Content.ReadFromJsonAsync<ExportStatusModel>();
if (exportStatus != null)
{
return;
}
}
}
}
- 主计长**
[HttpGet("export-status")]
public async Task<ActionResult<ExportStatusModel>> GetExportStatus(Guid guid)
{
var model = await _exportRequestRepository.GetExportStatus(guid);
if (model == null)
return NotFound();
return Ok(model);
}
- 型号**
public class ExportStatusModel
{
public Guid Guid { get; set; }
public int Status { get; set; }
public string UserSsid { get; set; } = string.Empty;
public int DocumentId { get; set; } = -1;
}
我已经试过先把Content
读为string
,然后再解析它,但是它返回了一个十六进制字符串,而不是原始的json。在blazor wasm中将这个十六进制字符串转换为ascii失败了。但是在控制台应用程序中它工作正常。
我还注意到响应中缺少了Content-Length
头,也许这会破坏json序列化器?
1条答案
按热度按时间jyztefdp1#
字符串为十六进制:
53 == 'S'和二维== '-'
您可以将其转换为一个普通字符串,至少使用:
我不知道为什么是十六进制的。也许你在VisualStudio中打开了“显示为十六进制”。
右击字段并检查是否选中十六进制显示!