错误:System.Text.Json.JsonException:"N"是值的无效开头。路径: $ |行号: 0 |



我已经成功创建了一个rest API来连接到Microsoft SQL数据库。所有得到,张贴,拉&删除函数在API中成功工作。然后,我使用Blazor服务器应用程序创建了一个用户界面。UI与API通信以检索&发送数据。数据库中的所有信息都已成功检索,但我遇到了这个错误";错误:System.Text.Json.JsonException:"N"是无效的值开头。路径:$|行号:0|"尝试将新数据(任务(添加到数据库时。当我在错误发生后重新加载页面时,即使在初始过程中失败,数据也会成功添加。

下面是创建点击。。。


@code{
public class TasksClass
{
public int TaskID { get; set; }
public string TaskTitle { get; set; }
public string TaskDetails { get; set; }
public string DateAdded { get; set; }
}
private IEnumerable<TasksClass> tasks = Array.Empty<TasksClass>();
private string modalTitle;
private int TaskID;
private string TaskTitle;
private string TaskDetails;
private DateTime DateAdded;
// Create click
private async Task createClick()
{
try
{
var tskObj = new TasksClass()
{
TaskTitle = TaskTitle,
TaskDetails = TaskDetails,
DateAdded = DateAdded.ToString("yyyy-MM-dd")
};
var request = new HttpRequestMessage(HttpMethod.Post,
config["API_URL"] + "Tasks/AddTasks");
request.Content = new StringContent(JsonSerializer.Serialize(tskObj), null, "application/json-patch+json");
var client = ClientFactory.CreateClient();
var response = await client.SendAsync(request);
using var responseStream = await response.Content.ReadAsStreamAsync();
string res = await JsonSerializer.DeserializeAsync<string>(responseStream);
await JS.InvokeVoidAsync("alert", res);
await refreshList();
}
catch(HttpRequestException)
{
throw new BadHttpRequestException("no");
}

}

I put a breakpoint in the createClick & did a walk through & realized the error occurs here

string res=等待JsonSerializer.DeserializeAsync(responseStream(;

await JS.InvokeVoidAsync("alert", res);

I can't seem to figure out exactly what the problem is.

由于响应主体以一个";N";,但是JsonDeserializer期望它以JSON对象(例如,使用大括号(开始。我的假设是Tasks/AddTasks只是返回一个字符串,所以它不是JSON格式的。快速解决方案是不反序列化响应,因为您所需要的只是原始字符串响应。

要做到这一点,只需更换以下线路:

using var responseStream = await response.Content.ReadAsStreamAsync()    
string res = await JsonSerializer.DeserializeAsync<string>(responseStream);

这个:

string res = await response.Content.ReadAsStringAsync();

最新更新