I'm using JSON.NET to serialize DateTime values directly from object instances (not using DateTime.ToString() with formatter).
有没有办法强制使用JSON.NET在序列化中包含毫秒,即使DateTime的毫秒分量为零?
背景:对于这个JSON端点,我有一个非常慢的Web服务使用者.条件逻辑对于消费者来说是昂贵的,所以我希望每次都提供相同的数据格式化.
I'm using JSON.NET to serialize DateTime values directly from object instances (not using DateTime.ToString() with formatter).
有没有办法强制使用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
.