using System.Collections.Generic;
using Newtonsoft.Json.Converters;
public static void Main()
var people = new List<Person>
new Person { Name = "Grandpa", DateOfBirth = new DateTime(1925, 3, 2), DateOfDeath = new DateTime(2009, 10, 13) },
new Person { Name = "Dad", DateOfBirth = new DateTime(1951, 7, 16), DateOfDeath = DateTime.MinValue }
var json = JsonConvert.SerializeObject(people, Formatting.Indented, new MinDateTimeConverter());
var deserializedPeople = JsonConvert.DeserializeObject<List<Person>>(json, new MinDateTimeConverter());
foreach (Person p in deserializedPeople)
Console.WriteLine("Name: " + p.Name);
Console.WriteLine("DateOfBirth: " + p.DateOfBirth);
Console.WriteLine("DateOfDeath: " + p.DateOfDeath);
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public DateTime DateOfDeath { get; set; }
public class MinDateTimeConverter : IsoDateTimeConverter
public MinDateTimeConverter()
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'";
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (objectType == typeof(DateTime) && reader.TokenType == JsonToken.Null)
return DateTime.MinValue;
return base.ReadJson(reader, objectType, existingValue, serializer);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
if (value is DateTime date && date == DateTime.MinValue)
base.WriteJson(writer, value, serializer);