У меня есть первая конечная точка 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;
}
}
Код: Выделить всё
public class PersonWithGender
{
public int Id { get; set; }
public Gender Gender { get; set; }
}
public enum Gender
{
Male = 1,
Female = 2
}
Код: Выделить всё
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
:
Код: Выделить всё
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