Рассмотрим код ...
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]
после I return Created("user", newUser)
. Он вызывается в моем проекте MVC / Razor через _httpClient.PostAsync
. Я подтвердил, что значения верны, когда Created
возвращается в вызов PostAsync
, но, несмотря ни на что, значение, проанализированное из тела ответа, содержит только значения по умолчанию (фактический идентификатор - Guid
).
Сначала я подумал, что это может быть проблема, связанная с UTF8, так как это кодировка для StringContent
, которую я публикую на ApiController
. Ссылка на десериализацию UTF8 здесь , но у меня возникли проблемы при переходе от IO.Stream HttpContent
к ReadOnlySpan
или Utf8JsonReader
.
Я нашел этого проекта во время поиска, что заставляет меня думать, что оно должно работать так, как я ожидал.