如何在 ASP.NET Core 2.1 中全局格式化 NodaTime 日期字符串?

How to format NodaTime date string globally in ASP.NET Core 2.1?

目前,我正在尝试使用 JsonFormatters 序列化 ISO 8601 规范中的字符串。我的启动配置中的格式,但无法使其工作。

我的启动配置如下:

services.AddMvcCore(
    (options) => {
        options.SslPort = 44321;
        options.Filters.Add(new RequireHttpsAttribute());
    }
)
.AddJsonFormatters(jsonSerializerSettings => {
    jsonSerializerSettings.DateParseHandling = DateParseHandling.None;
    jsonSerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffZ";
})
.AddApiExplorer()
.AddJsonOptions(options => {
    options.AllowInputFormatterExceptionMessages = false;
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();

我也试过ServiceStackText which is mentioned in the documentation,但也没用。

 NodaSerializerDefinitions.LocalTimeSerializer.ConfigureSerializer();
 DateTimeZoneProviders.Tzdb
     .CreateDefaultSerializersForNodaTime()
     .ConfigureSerializersForNodaTime();

我不断收到以下格式,

即对于 LocalDate 序列化:

{
    "patientDob": "Thursday, June 15, 2017",
}

如何配置字符串 ISO 8601 规范。 NodaTime 全局日期类型的格式设置?

我的模型,

{
    public LocalDate patientDob { get; set; }
}

和我的观点model/API资源:

{
    public string patientDob { get; set; }
}

这是问题所在,在您的控制器中:

res.NodaLocalDateString = apiResource.NodaLocalDate = nodaModel.NodaLocalDate.ToString ();

您根本没有将 LocalDate 转换为 JSON;您正在将 字符串 转换为 JSON,并且您正在通过调用 LocalDate.ToString().

获取该字符串

将您的 API 资源更改为 LocalDate 属性 而不是 string 属性,以便由 [=24] 完成转换=] 而不是你调用 ToString().