public override object ReadJson()

in src/YouTrackSharp/Json/UnixDateTimeOffsetConverter.cs [30:69]


        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return null;
            }

            long ticks;

            // ReSharper disable once SwitchStatementMissingSomeCases
            switch (reader.TokenType)
            {
                case JsonToken.Integer:
                case JsonToken.Float:
                    ticks = (long)reader.Value;
                    break;
                case JsonToken.String:
                    long.TryParse(reader.Value.ToString(), out ticks);
                    break;
                default:
                    throw new FormatException(string.Format(Strings.Exception_CouldNotParseUnixTimeStamp, reader.Value));
            }

            var converted = Math.Ceiling(Math.Log10(ticks)) >= 12 
                ? DateTimeOffset.FromUnixTimeMilliseconds(ticks) 
                : DateTimeOffset.FromUnixTimeSeconds(ticks);

            // Return value
            if (objectType == typeof(DateTimeOffset) || objectType == typeof(DateTimeOffset?))
            {
                return converted;
            }

            if (objectType == typeof(DateTime) || objectType == typeof(DateTime?))
            {
                return converted.DateTime;
            }

            return null;
        }