Невозможно использовать GetFromJsonAsync из-за исключения System.Text.Json.JsonException: значение JSON не удалось преобC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно использовать GetFromJsonAsync из-за исключения System.Text.Json.JsonException: значение JSON не удалось преоб

Сообщение Anonymous »

Я использую .NET 9 и не уверен, изменилось ли что-то или в чем проблема, но ни одно из решений подобных ошибок мне не помогло.
У меня есть первая конечная точка http://localhost:5278/people/index, которая возвращает JSON со значениями перечисления Gender в текстовом формате:

Код: Выделить всё

[ApiController]
[Route("[controller]")]
public class PeopleController : ControllerBase
{
private readonly MyHttpClient _myHttpClient;

public PeopleController(MyHttpClient myHttpClient)
{
_myHttpClient = myHttpClient;
}

[HttpGet("index")]
public ActionResult Get()
{
var items = new List
{
new PersonWithGender {
Id = 1,
Gender = Gender.Male
},
new PersonWithGender {
Id = 2,
Gender = Gender.Female
}
};

return Ok(items);
}

[HttpGet("test")]
public async Task Test()
{
var items = await _myHttpClient.GetPeopleAsync();
return items;
}
}
Это мой класс PersonWithGender с перечислением (я хочу, чтобы эти классы оставались чистыми, поэтому у них не может быть никаких атрибутов типа [JsonConverter(typeof(JsonStringEnumConverter))]):

Код: Выделить всё

public class PersonWithGender
{
public int Id { get; set; }
public Gender Gender { get; set; }
}

public enum Gender
{
Male = 1,
Female = 2
}
Я добавил следующий код в Program.cs:

Код: Выделить всё

builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
У меня есть HttpClient, который вызывает указанную выше конечную точку и преобразует полученные данные в список
:

Код: Выделить всё

public class MyHttpClient(HttpClient httpClient)
{
private readonly HttpClient _httpClient = httpClient;

public async Task GetPeopleAsync()
{
var items = await _httpClient.GetFromJsonAsync("/people/index");
return items;
}
}
Однако возникает следующая ошибка:

System.Text.Json.JsonException: «Значение JSON не удалось быть преобразовано в WebApplication1.Models.Gender. Путь: $[0].пол | НомерЛинии: 0 | BytePositionInLine: 24.'

Это можно проверить, вызвав конечную точку теста: http://localhost:5278/people/test.
Я пытался добавить:

Код: Выделить всё

var options = new JsonSerializerOptions()
{
Converters = { new JsonStringEnumConverter() }
};

var items = await _httpClient.GetFromJsonAsync("/people/index", options);
Но тогда все мои данные пусты, я не знаю, что происходит.
Вот весь код: https://github.com/alekswaleks/WebApplication3/ дерево/мастер/WebApplication3


Подробнее здесь: https://stackoverflow.com/questions/792 ... n-the-json
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»