"Не удалось преобразовать значение в NodaTime.LocalDateTime" - PullRequest
0 голосов
/ 06 апреля 2020

Я использую. Net Core 3.1 в качестве моей платформы.

У меня есть эта настройка при запуске:

using NodaTime;
using NodaTime.Serialization.SystemTextJson;

services.AddControllers()
        .AddJsonOptions(options =>
        {
            var settings = options.JsonSerializerOptions;

            settings.AllowTrailingCommas = false;
            settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
            settings.WithIsoDateIntervalConverter();
            settings.WithIsoIntervalConverter();
        });

И это моя модель API:

public class CreateDto
{
    public int Status { get; set; }

    public Guid ApprovedBy { get; set; }

    public LocalDateTime DateFrom { get; set; }

    public LocalDateTime DateTo { get; set; }
}

Это мой контроллер:

[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateDto createEntity)
{
    var createdEntity = await _service.Create(createEntity);
    return Ok(createdEntity);
}

Каждый раз, когда я использую Почтальон с этим JSON Тело:

{
    "Status": 1,
    "ApprovedBy": "970a50c5-ae21-4f41-bea9-691f8c60224c",
    "DateFrom": "2020-04-01T00:00:00.000Z",
    "DateTo": "2020-04-05T23:59:59.000Z"
}

Я всегда получаю эту ошибку:

{
    "errors": {
        "DateTo": [
            "Cannot convert value to NodaTime.LocalDateTime"
        ],
        "DateFrom": [
            "Cannot convert value to NodaTime.LocalDateTime"
        ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|4a836dd3-4ce779bc5503ac63."
}

Вопрос: я что-то упустил в моей загрузочной конфигурации? Если нет, что я могу сделать, чтобы исправить эту ошибку?

1 Ответ

1 голос
/ 06 апреля 2020

Ваш JSON не представляет LocalDateTime значений - он представляет Instant (или OffsetDateTime) значений из-за "Z" в конце.

Итак, ваши варианты:

  • Измените тип в вашей модели на Instant или OffsetDateTime
  • Измените отправляемые данные - просто удалите 'Z' из конца каждой строки
...