private void TestParse(DateTimeOffset expectedResult, string dateTimeString)
        {
            var result = FlexibleIso8601DateTimeParser.TryParse(dateTimeString);

            Assert.NotNull(result);
            Assert.Equal(expectedResult.Offset, result.Value.Offset);
            Assert.Equal(expectedResult.UtcDateTime.Year, result.Value.UtcDateTime.Year);
            Assert.Equal(expectedResult.UtcDateTime.Month, result.Value.UtcDateTime.Month);
            Assert.Equal(expectedResult.UtcDateTime.Day, result.Value.UtcDateTime.Day);
            Assert.Equal(expectedResult.UtcDateTime.Hour, result.Value.UtcDateTime.Hour);
            Assert.Equal(expectedResult.UtcDateTime.Minute, result.Value.UtcDateTime.Minute);
            Assert.Equal(expectedResult.UtcDateTime.Second, result.Value.UtcDateTime.Second);
            Assert.True(Math.Abs(expectedResult.UtcDateTime.Millisecond - result.Value.UtcDateTime.Millisecond) <= 1);
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var isNullable = objectType.IsGenericType && objectType.GetGenericTypeDefinition() == typeof(Nullable <>);
            var actualType = isNullable ? Nullable.GetUnderlyingType(objectType) : objectType;

            if (reader.TokenType == JsonToken.Null)
            {
                if (isNullable)
                {
                    return(null);
                }
                throw new ParseException("Cannot convert JSON null value to {0}.", objectType);
            }

            if (reader.TokenType == JsonToken.String)
            {
                var dateTimeOffset = FlexibleIso8601DateTimeParser.TryParse(reader.Value.ToString());

                if (dateTimeOffset == null)
                {
                    return(isNullable? Activator.CreateInstance(actualType): null);
                }

                if (actualType == typeof(DateTimeOffset))
                {
                    return(dateTimeOffset.Value);
                }

                if (actualType == typeof(DateTime))
                {
                    return(dateTimeOffset.Value.UtcDateTime);
                }

                throw new ParseException("Unexpected target type {0}.", actualType);
            }

            throw new ParseException("Unexpected token parsing date. Expected String, got {0}.", reader.TokenType);
        }