Is it possible to tell Json.NET to deserialize '2012-07-19' to a DateTimeOffset value with zero offset?
Code example to reproduce:
public class SingleDateTimeField
{
public DateTimeOffset StartDateTime { get; set; }
}
[Test]
public void Convert()
{
// Given
var content = @"{""startDateTime"":""2012-07-19""}";
var jsonSerializerSettings = new JsonSerializerSettings()
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateParseHandling = DateParseHandling.DateTimeOffset,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
// When
var obj = JsonConvert.DeserializeObject<SingleDateTimeField>(content, jsonSerializerSettings);
// Then
var expected = new DateTimeOffset(2012, 07, 19, 0, 0, 0, TimeSpan.Zero);
Assert.That(obj.StartDateTime, Is.EqualTo(expected));
}
This fails with
Expected: 2012-07-19 00:00:00.000+00:00
But was: 2012-07-19 00:00:00.000+03:00
Note that the timezone is +03:00
Update:
I can get it working by using specialized converter (example below), but isnt the setting DateTimeZoneHandling = DateTimeZoneHandling.Utc
supposed to already convert this UTC? AssumeUtc
converter should not be required.
public class AssumeUtc : IsoDateTimeConverter
{
public AssumeUtc()
{
DateTimeStyles = System.Globalization.DateTimeStyles.AssumeUniversal;
}
}
public class SingleDateTimeField
{
[JsonConverter(typeof(AssumeUtc))]
public DateTimeOffset StartDateTime { get; set; }
}