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

JSO*_*SON 4 nodatime json-serialization 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();
Run Code Online (Sandbox Code Playgroud)

我也尝试过文档中提到的ServiceStackText,但这也没有用.

 NodaSerializerDefinitions.LocalTimeSerializer.ConfigureSerializer();
 DateTimeZoneProviders.Tzdb
     .CreateDefaultSerializersForNodaTime()
     .ConfigureSerializersForNodaTime();
Run Code Online (Sandbox Code Playgroud)

我一直得到以下格式,

LocalDate序列化:

{
    "patientDob": "Thursday, June 15, 2017",
}
Run Code Online (Sandbox Code Playgroud)

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

我的模特,

{
    public LocalDate patientDob { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和我的视图模型/ API资源:

{
    public string patientDob { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 17

这是您控制器中的问题:

res.NodaLocalDateString = apiResource.NodaLocalDate = nodaModel.NodaLocalDate.ToString ();
Run Code Online (Sandbox Code Playgroud)

你根本没有转换LocalDate成JSON; 你正在将一个字符串转换为JSON,并且你通过调用获得该字符串LocalDate.ToString().

将您的API资源更改为具有LocalDate属性而不是string属性,以便转换由Json.NET而不是您调用完成ToString().

  • @JSON:你的意思是你的问题实际上并不是关于JSON的吗?我发现很难理解你实际想要实现的目标.(我也不知道为什么你希望你的View/API模型有一个字符串表示而不仅仅是Noda Time表示.)据我所知,我已经回答了这个问题 - 我建议你问一个*new*问题,试图尽可能清楚地了解你想要实现的目标和原因. (5认同)