diff --git a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs index 47f611f4..937ee426 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs @@ -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("\"2014-01-01T00:00:00+02:15\"", settings); + + Assert.AreEqual(dto, test); + Assert.AreEqual(dto.ToString("o"), test.ToString("o")); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs b/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs index 0f90b870..fd562b69 100644 --- a/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs @@ -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;