在序列化DateTime时强制JSON.NET包含毫秒(即使ms分量为零)
我使用JSON.NET直接从对象实例序列化DateTime值(不格式化程序使用DateTime.ToString())。
有没有办法强制JSON.NET在序列化中包含毫秒,即使DateTime的毫秒部分是零?
背景:对于这个JSON端点,我有一个非常慢的Web服务使用者。 条件逻辑对于消费者来说是昂贵的,所以我想每次都提供相同的数据格式。
我在当前的项目中遇到了同样的问题。 我们使用Web API(以及JSON.Net)来实现一个REST API。 我们发现,在序列化DateTime
对象时,JSON.Net会从毫秒中忽略尾随零,如果它为零,则从整个date中省略毫秒。 我们的客户期待一个固定长度的date时间string,精确到三位数毫秒。 我们通过在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,则可以通过创buildJsonSerializerSettings
一个新实例,如上所示添加IsoDateTimeConverter
,然后将序列化程序设置传递给JsonConvert.SerializeObject()
来执行JsonConvert.SerializeObject()
。
注意:如果要序列化DateTimeOffset
或本地DateTime
并且想要包含时区偏移量,请将上述格式中带引号的'Z'
replace为未加引号的K
请参阅文档中的自定义date和时间格式string以获取更多信息。