我的.NET Core API存在问题,当DateTimes序列化时,如果值为0,则会留下毫秒。This问题解释了问题。我将以下内容添加到我的.NET Core Startup类中,它解决了这个问题,当我执行GET
时,所有日期都将正确格式化:
services.AddMvc()
.AddJsonOptions(options =>
{
var settings = options.SerializerSettings;
var dateConverter = new IsoDateTimeConverter
{
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff"
};
settings.Converters.Add(dateConverter);
});
执行此操作后,我发现它破坏了其他地方的默认模型绑定。例如,我有一个POST
端点,它接受以下viewmodel:
public class PatientRegistrationViewModel
{
public DateTime DateOfBirth { get; set; }
}
以前我在成功绑定的请求正文中传递了以下JSON数据:
{
dateOfBirth: '1981-04-18'
}
在实现上面的日期转换器之后,我的控制器中的viewmodel等于null。
答案 0 :(得分:1)
一个快速的解决方案是介绍和使用WriteOnlyIsoDateTimeConverter
:
public class WriteOnlyIsoDateTimeConverter : IsoDateTimeConverter
{
public override bool CanRead { get { return false; } }
}
通过覆盖CanRead
返回false,模型绑定器应该继续使用当前内置的日期解析,同时使用转换器进行输出格式化。
另一种选择可能是替换this question中显示的JsonOutputFormatter
。