I encountered this issue when working with JsonWriter and needed to resolve it because we observed that Javascript date libraries such as Day.js prefer milliseconds to have 3 digits. This question led me to the resolution, so I thought to share it in case others have a use-case like mine:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw)) {
writer.Formatting = Newtonsoft.Json.Formatting.None;
writer.DateFormatString="yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff''";
writer.WriteStartObject();
DateTime? date = new DateTime(2021,12,30,23,59,40,250);
writer.WritePropertyName("Date1");
writer.WriteValue(date);
date = new DateTime(2021, 12, 30, 23, 59, 40, 555);
writer.WritePropertyName("Date2");
writer.WriteValue(date);
date = new DateTime(2021, 12, 30, 23, 59, 40, 0);
writer.WritePropertyName("Date3");
writer.WriteValue(date);
date = null;
writer.WritePropertyName("DateNULL");
writer.WriteValue(date);
writer.WriteEndObject();
}
Console.WriteLine(sb.ToString());
This produces:
{
"Date1": "2021-12-30T23:59:40.250",
"Date2": "2021-12-30T23:59:40.555",
"Date3": "2021-12-30T23:59:40.000",
"DateNULL": null
}
The important line I needed to add was:
writer.DateFormatString="yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff''";