考虑以下代码...
为什么数据无法正确反序列化为“User”对象?我还通过DotNetFiddle验证了行为,以防它是本地系统的问题。没有抛出异常。
我的实际实现是从
我最初认为这可能是与UTF8相关的问题,因为这是我发布到
using System;
using System.Text.Json;
public class Program
{
public static void Main()
{
int id = 9;
string str = "{\"id\": " + id + "}";
var u = JsonSerializer.Deserialize<User>(str);
Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}"); // always 0/init/default value
}
}
public class User {
public int Id { get; set; }
}
为什么数据无法正确反序列化为“User”对象?我还通过DotNetFiddle验证了行为,以防它是本地系统的问题。没有抛出异常。
我的实际实现是从
[ApiController]
的[HttpPost]
操作中读取,在我return Created("user", newUser)
之后调用。在我的MVC/Razor项目中通过_httpClient.PostAsync
调用它。当Created
返回到PostAsync
调用时,我验证了值是正确的,但无论如何,从响应体解析的值仅包含默认值(实际ID是Guid
)。我最初认为这可能是与UTF8相关的问题,因为这是我发布到
ApiController
的StringContent
的编码方式。 UTF8反序列化在here中引用,但我在从HttpContent
的IO.Stream到ReadOnlySpan
或Utf8JsonReader
的过程中遇到了麻烦。
我在搜索时发现了这个项目,让我觉得它应该可以按照我的期望工作。
Id
而不是id
,因此找不到它,所以它采用了默认值0
。 - Nin