Merge pull request #239 from mj1856/master

Fix an InvalidCastException with DateTimeOffset and IsoDateTimeConverter
This commit is contained in:
James Newton-King
2014-04-06 20:44:48 +12:00
2 changed files with 19 additions and 1 deletions
@@ -274,5 +274,23 @@ namespace Newtonsoft.Json.Tests.Converters
Console.WriteLine(jsonText);
}
[Test]
public void DeserializeDateTimeOffset()
{
var settings = new JsonSerializerSettings();
settings.DateParseHandling = DateParseHandling.DateTimeOffset;
settings.Converters.Add(new IsoDateTimeConverter());
// Intentionally use an offset that is unlikely in the real world,
// so the test will be accurate regardless of the local time zone setting.
var offset = new TimeSpan(2, 15, 0);
var dto = new DateTimeOffset(2014, 1, 1, 0, 0, 0, 0, offset);
var test = JsonConvert.DeserializeObject<DateTimeOffset>("\"2014-01-01T00:00:00+02:15\"", settings);
Assert.AreEqual(dto, test);
Assert.AreEqual(dto.ToString("o"), test.ToString("o"));
}
}
}
@@ -136,7 +136,7 @@ namespace Newtonsoft.Json.Converters
{
#if !NET20
if (t == typeof(DateTimeOffset))
return new DateTimeOffset((DateTime)reader.Value);
return reader.Value is DateTimeOffset ? reader.Value : new DateTimeOffset((DateTime)reader.Value);
#endif
return reader.Value;