We ran into this same issue on my current project. We are using Web API (and hence JSON.Net) to implement a REST API. We discovered that, when serializing DateTime
objects, JSON.Net omits the trailing zeros from the milliseconds, or omits the milliseconds from the date entirely if it is zero. Our clients were expecting a fixed-length date-time string, with exactly 3 digits for the milliseconds. We fixed it by doing the following in 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);
If you're not using Web API, you can do the same thing by creating a new instance of JsonSerializerSettings
, adding the IsoDateTimeConverter
to it as shown above, then passing the serializer settings to JsonConvert.SerializeObject()
.
Note: If you're serializing a DateTimeOffset
or a local DateTime
and you want to include the timezone offset, replace the quoted 'Z'
in the above format with an unquoted K
.
See Custom Date and Time Format Strings in the documentation for more info.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…