public static void DateConverter_Should_Deserialize_DateTimeNullable_Without_Timezone( string timeZone, string dateTime, string expectedDateTime) { // arrange var converter = (string.IsNullOrWhiteSpace(timeZone)) ? new DateTimeConverter() : new DateTimeConverter(() => TZConvert.GetTimeZoneInfo(timeZone)); var originalObject = new DateTimeClassTest { OnlyDateNullable = (dateTime == null) ? (DateTime?)null : DateTime.Parse(dateTime) }; string originalJson = JsonConvert.SerializeObject(originalObject); // act var deserializeResult = JsonConvert.DeserializeObject <DateTimeClassTest>(originalJson, converter); var deserializeResultOnlyDateNullable = deserializeResult.OnlyDateNullable?.ToString("yyyy-MM-ddTHH:mm:ss"); // assert Assert.NotNull(deserializeResult); Assert.Equal(expectedDateTime, deserializeResultOnlyDateNullable); }
[InlineData(null, "2019-01-22T13:00:00", null, "2019-01-22T15:00:00.000Z", null)] // -02 with default (daylight saving) public static void DateTimeConverter_Should_Deserialize_And_Serialize_Considering_TimeZone( string timeZone, string dateTime, string nullableDateTime, string expectedDateTime, string expectedNullableDateTime) { // arrange var converter = (string.IsNullOrWhiteSpace(timeZone)) ? new DateTimeConverter() : new DateTimeConverter(() => TZConvert.GetTimeZoneInfo(timeZone)); var originalObject = new DateTimeClassTest { MyDateTime = DateTime.Parse(dateTime), MyNullableDateTime = (string.IsNullOrWhiteSpace(nullableDateTime) ? (DateTime?)null : DateTime.Parse(nullableDateTime)), }; string originalJson = JsonConvert.SerializeObject(originalObject); // act var deserializeResult = JsonConvert.DeserializeObject <DateTimeClassTest>(originalJson, converter); var deserializeResultString = JsonConvert.SerializeObject(deserializeResult, Formatting.Indented); var serializeResultString = JsonConvert.SerializeObject(deserializeResult, Formatting.Indented, converter); var serializeResult = JsonConvert.DeserializeObject <DateTimeClassTest>(serializeResultString); // assert Assert.NotNull(deserializeResult); Assert.NotNull(serializeResultString); Assert.NotNull(serializeResult); var deserializeResultDateTime = deserializeResult.MyDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffK"); var serializeResultDateTime = serializeResult.MyDateTime.ToString("yyyy-MM-ddTHH:mm:ss"); var deserializeResultNullableDateTime = deserializeResult.MyNullableDateTime?.ToString("yyyy-MM-ddTHH:mm:ss.fffK"); var serializeResultNullableDateTime = serializeResult.MyNullableDateTime?.ToString("yyyy-MM-ddTHH:mm:ss"); Assert.Equal(expectedDateTime, deserializeResultDateTime); Assert.Equal(dateTime, serializeResultDateTime); Assert.Equal(expectedNullableDateTime, deserializeResultNullableDateTime); Assert.Equal(nullableDateTime, serializeResultNullableDateTime); }
public static void DateConverter_Should_Serialize_DateTime_Without_Timezone( string timeZone, string dateTime, string expectedDateTime) { // arrange var converter = (string.IsNullOrWhiteSpace(timeZone)) ? new DateTimeConverter() : new DateTimeConverter(() => TZConvert.GetTimeZoneInfo(timeZone)); var originalObject = new DateTimeClassTest { OnlyDate = DateTime.Parse(dateTime) }; // act string serializeJson = JsonConvert.SerializeObject(originalObject, converter); var serializeObject = JsonConvert.DeserializeObject <DateTimeClassTest>(serializeJson); var serializeObjectOnlyDate = serializeObject.OnlyDate.ToString("yyyy-MM-ddTHH:mm:ss"); // assert Assert.NotNull(serializeObject); Assert.Equal(expectedDateTime, serializeObjectOnlyDate); }
[InlineData(null, "2019-01-22T13:00:00", null, "2019-01-22T15:00:00.000Z", null)] // -02 with default (daylight saving) public static void DateTimeConverter_Should_Serialize_Considering_TimeZone( string timeZone, string dateTime, string nullableDateTime, string expectedDateTime, string expectedNullableDateTime) { // arrange var converter = (string.IsNullOrWhiteSpace(timeZone)) ? new DateTimeConverter() : new DateTimeConverter(() => TZConvert.GetTimeZoneInfo(timeZone)); var originalObject = new DateTimeClassTest { MyDateTime = DateTime.Parse(dateTime), MyNullableDateTime = (string.IsNullOrWhiteSpace(nullableDateTime) ? (DateTime?)null : DateTime.Parse(nullableDateTime)), }; originalObject.OnlyDate = originalObject.MyDateTime; originalObject.OnlyDateNullable = originalObject.MyNullableDateTime; string originalJson = JsonConvert.SerializeObject(originalObject); // act var deserializeResult = JsonConvert.DeserializeObject <DateTimeClassTest>(originalJson, converter); var deserializeResultString = JsonConvert.SerializeObject(deserializeResult, Formatting.Indented); var serializeResultString = JsonConvert.SerializeObject(deserializeResult, Formatting.Indented, converter); var serializeResult = JsonConvert.DeserializeObject <DateTimeClassTest>(serializeResultString); Debug.WriteLine("Deserialize: "); Debug.WriteLine(deserializeResultString); Debug.WriteLine("Serialize: "); Debug.WriteLine(serializeResultString); // assert Assert.NotNull(deserializeResult); Assert.NotNull(serializeResultString); Assert.NotNull(serializeResult); var deserializeResultDateTime = deserializeResult.MyDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffK"); var serializeResultDateTime = serializeResult.MyDateTime.ToString("yyyy-MM-ddTHH:mm:ss"); var deserializeResultOnlyDate = deserializeResult.OnlyDate.ToString("yyyy-MM-dd"); var serializeResultOnlyDate = serializeResult.OnlyDate.ToString("yyyy-MM-dd"); Assert.Equal(expectedDateTime, deserializeResultDateTime); Assert.Equal(dateTime, serializeResultDateTime); Assert.Equal(dateTime.Split("T").First(), deserializeResultOnlyDate); Assert.Equal(deserializeResult.OnlyDate.ToString("yyyy-MM-dd"), serializeResultOnlyDate); if (string.IsNullOrWhiteSpace(nullableDateTime)) { Assert.Null(deserializeResult.MyNullableDateTime); Assert.Null(serializeResult.MyNullableDateTime); Assert.Null(deserializeResult.OnlyDateNullable); Assert.Null(serializeResult.OnlyDateNullable); } else { var deserializeResultNullableDateTime = deserializeResult.MyNullableDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss.fffK"); var serializeResultNullableDateTime = serializeResult.MyNullableDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss"); var deserializeResultOnlyDateNullable = deserializeResult.OnlyDateNullable.Value.ToString("yyyy-MM-dd"); var serializeResultOnlyDateNullable = serializeResult.OnlyDateNullable.Value.ToString("yyyy-MM-dd"); Assert.Equal(expectedNullableDateTime, deserializeResultNullableDateTime); Assert.Equal(nullableDateTime, serializeResultNullableDateTime); Assert.Equal(nullableDateTime.Split("T").First(), deserializeResultOnlyDateNullable); Assert.Equal(deserializeResult.OnlyDateNullable.Value.ToString("yyyy-MM-dd"), serializeResultOnlyDateNullable); } }