Сериализация NodaTime Instant не работает с веб-API Asp.Net Core и OData. - PullRequest
0 голосов
/ 19 сентября 2018

Я использую NodaTime в качестве DateTime-API в моем AspNetCore OData - веб-приложении.Все работает как положено до сериализации.Это моя база данных.

public class DbEntity
{
    public Instant CreateDate { get; set; }
}

Вот мой метод запуска-конфигурирования:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddJsonOptions(options => options.SerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));
services.AddDbContext<DefaultContext>(
    options => options
        .UseLazyLoadingProxies()
        .UseNpgsql(Configuration.GetConnectionString("someString"), o => o.UseNodaTime()));
services.AddTransient<ICrudEditable, CrudEditable>();
services.AddOData();

Я использую Microsoft.AspNetCore.OData 7.0.1 NodaTime 2.4.0 версию вместе с NodaTime.Serialization.JsonNet 2.0.0 и Newtonsoft.Json 11.0.2.

Действия:

// GET api/values
[HttpGet]
public ActionResult Get ( )
{
    return Ok(new DbEntity { CreateDate = SystemClock.Instance.GetCurrentInstant() });
}

Пока все хорошо.Это действие из контроллера значений по умолчанию (производного от ControllerBase).Но если я вызову действие ниже, где Controller наследуется от ODataController, CreateDate будет пустым:

[EnableQuery]
[ODataRoute("entity")]
public IActionResult Get()
{
    return Ok(new DbEntity { CreateDate = SystemClock.Instance.GetCurrentInstant() });
}

Нет ошибок, нет ничего, просто пусто ..

РЕДАКТИРОВАТЬ IЯ поднял вопрос о github, для всех, кто интересуется этим вопросом: https://github.com/OData/WebApi/issues/1626

...