I am trying to do a custom Datetime jsonconverter, I am trying to get the json string inside the ReadJson but it seems the value gets converted to Datetime before it gets passed to ReadJson. currently, I get the value like Start: 11/27/2020 05:42:00 however I need it to be exactly as the input json Start: "2020-11-27T16:42:00.000+11:00
https://dotnetfiddle.net/6Oe2D7
class Program
{
static void Main(string[] args)
{
string json = @"{ ""Start"": ""2020-11-27T16:42:00.000+11:00""}";
Absense parsed = JsonConvert.DeserializeObject<Absense>(json);
}
}
class Absense
{
[Newtonsoft.Json.JsonConverter(typeof(DatetimeJsonConverter))]
public DateTime Start { get; set; }
}
class DatetimeJsonConverter : JsonConverter<DateTime?>
{
public override DateTime? ReadJson(JsonReader reader, Type objectType, DateTime? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
string value = reader.Value?.ToString();
Console.WriteLine($"{reader.Path}: {value}"); //I want the value here to be exactly as the input json
if (value != null)
{
if (DateTimeOffset.TryParse(value, out DateTimeOffset timeOffset))
{
return new DateTime(timeOffset.Year, timeOffset.Month, timeOffset.Day, timeOffset.Hour, timeOffset.Minute, timeOffset.Second);
}
}
return existingValue;
}
public override void WriteJson(JsonWriter writer, DateTime? value, JsonSerializer serializer)
{
if (value.HasValue)
{
writer.WriteValue(value.Value.ToString("s", System.Globalization.CultureInfo.InvariantCulture));
}
else
{
writer.WriteNull();
}
}
}