NodaTime Instant的序列化不适用于Asp.Net Core Web API和OData

Jos*_*hit 5 c# odata nodatime .net-core asp.net-core

我在AspNetCore OData-webapp中使用NodaTime作为DateTime-API。一切都按预期进行,直到序列化为止。这是我的entityBase。

public class DbEntity
{
    public Instant CreateDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Startup-ConfigureServices方法:

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();
Run Code Online (Sandbox Code Playgroud)

Microsoft.AspNetCore.OData 7.0.1 NodaTime 2.4.0NodaTime.Serialization.JsonNet 2.0.0和一起使用Version Newtonsoft.Json 11.0.2

动作:

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

到目前为止一切都很好。这是默认值控制器(源自ControllerBase)的操作。但是,如果我在操作从Controller派生自ODataController的情况下进行以下调用,则CreateDate为空:

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

没有错误,没什么,只是空..

编辑 我在github上提出了一个问题,对于对此问题感兴趣的任何人:https : //github.com/OData/WebApi/issues/1626