我正在使用 JSON.NET 直接从对象实例序列化 DateTime 值(不使用带有格式化程序的 DateTime.ToString())。
有没有办法强制 JSON.NET 在序列化中包含毫秒,即使 DateTime 的毫秒部分为零?
背景:对于这个 JSON 端点,我有一个非常慢的 Web 服务使用者。条件逻辑对消费者来说很昂贵,所以我想每次都提供相同的数据格式。
最佳答案
我们在我当前的项目中遇到了同样的问题。我们正在使用 Web API(以及 JSON.Net)来实现 REST API。我们发现,在序列化 DateTime
时对象,JSON.Net 忽略毫秒的尾随零,或者如果它是零,则完全忽略日期的毫秒。我们的客户期望一个固定长度的日期时间字符串,精确到毫秒的 3 位数字。我们通过在 Application_Start()
中执行以下操作来修复它:
JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings;
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter
{
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'"
};
settings.Converters.Add(dateConverter);
如果您不使用 Web API,您可以通过创建 JsonSerializerSettings
的新实例来做同样的事情。 , 添加 IsoDateTimeConverter
如上所示,然后将序列化程序设置传递给 JsonConvert.SerializeObject()
.
注意:如果您要序列化 DateTimeOffset
或本地 DateTime
并且您想包含时区偏移量,请替换引用的 'Z'
在上述格式中,带有未引用的 K
.
见 Custom Date and Time Format Strings在文档中了解更多信息。
关于c# - 强制 JSON.NET 在序列化 DateTime 时包含毫秒(即使 ms 组件为零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193281/