System.Text.Json.JsonException:输入不包含任何 JSON 标记

Bro*_*857 5 json json-deserialization json-serialization blazor

我只是想通过在 Blazor 应用程序中使用 Http POST 方法

public async Task CreateUnit(UnitEntity unit)
{
    await _http.PostJsonAsync<UnitEntity>("api/units", unit);
}
Run Code Online (Sandbox Code Playgroud)

_http 和 myObject 已在别处定义,但我收到了这个奇怪的错误。任何人都可以帮忙吗?这是我在其他地方能找到的最接近的东西:https : //github.com/dotnet/runtime/issues/30945

完整的错误信息是

System.Text.Json.JsonException:输入不包含任何 JSON 标记。当 isFinalBlock 为 true 时,期望输入以有效的 JSON 令牌开头。路径:$ | 行号:0 | 字节位置内联:0。

这是堆栈

在此处输入图片说明

Luk*_*kas 19

出现此错误的另一个原因(就像对我一样)是因为 API 端点不存在,因为它拼写错误。


Ogg*_*las 9

Program.cs Main我在方法中遇到了类似的错误CreateHostBuilder(args).Build();

System.FormatException:“无法解析 JSON 文件。”

JsonReaderException:输入不包含任何 JSON 令牌。当 isFinalBlock 为 true 时,预计输入以有效的 JSON 令牌开头。行号: 0 | 内联字节位置:0。

对我来说,结果是本地secrets.json文件不包含有效的 json 对象。

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-5.0&tabs=windows#secret-manager

因此,我在 Git 中看不到任何错误,也看不到回滚到工作提交的任何错误,因为文件未签入。

通过 Visual Studio 将空对象添加到文件中来解决 - 右键单击​​解决方案资源管理器中的项目并选择Manage User Secrets

{

}
Run Code Online (Sandbox Code Playgroud)

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-5.0&tabs=windows#manage-user-secrets-with-visual-studio


Len*_*rri 7

就我而言,代码是这样做的:

var json = await response.Content.ReadAsStringAsync();
var result = JsonObject.Parse(json); // threw the exception mentioned in the question
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种事?那是因为jsonvalue 是一个空字符串""解析失败并显示空字符串。

通过这个简单的更改修复了它:

var json = await response.Content.ReadAsStringAsync();
var result = string.IsNullOrEmpty(json) ? null : JsonObject.Parse(json);
Run Code Online (Sandbox Code Playgroud)