Я использую 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