/// <summary> /// Reads the next JSON token from the underlying <see cref="JsonReader"/> as a <see cref="Nullable{T}"/> of <see cref="DateTime"/>. /// </summary> /// <returns>A <see cref="Nullable{T}"/> of <see cref="DateTime"/>. This method will return <c>null</c> at the end of an array.</returns> public override DateTime?ReadAsDateTime() { DateTime?dateTime = _reader.ReadAsDateTime(); ValidateCurrentToken(); return(dateTime); }
/// <summary> /// Reads a date token from a JSON reader /// </summary> /// <param name="reader">json reader</param> /// <param name="objectType">object type</param> /// <returns>date object</returns> private object ReadDateToken(JsonReader reader, Type objectType) { if (objectType == typeof(DateTimeOffset?) && reader.TokenType == JsonToken.Null) return null; if (reader.TokenType == JsonToken.Date) { return reader.ReadAsDateTime(); } if (reader.TokenType != JsonToken.Integer) { throw new ArgumentException($"Expecting token of type '{JsonToken.Integer}', and found a token of type {reader.TokenType}."); } var value = Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture); if (_isMilliseconds) { return GetUtcDateFromUnixTimeMilliseconds(value); } else { return GetUtcDateFromUnixTimeSeconds(value); } }
private static void ReadByDataType(JsonReader reader, DataType dataType) { switch (dataType) { case DataType.String: reader.ReadAsString(); break; case DataType.Int16: case DataType.Int32: reader.ReadAsInt32(); break; case DataType.ByteArray: reader.ReadAsBytes(); break; case DataType.Decimal: reader.ReadAsDecimal(); break; case DataType.DateTime: reader.ReadAsDateTime(); break; // These types are dealt with, but there's no explicit reader method for them // so we just have to trust that it does the right thing. case DataType.Byte: case DataType.Int64: case DataType.Boolean: case DataType.Float: case DataType.Double: reader.Read(); break; } }
private bool ReadForType(JsonReader reader, JsonContract contract, bool hasConverter) { if (hasConverter) return reader.Read(); switch (contract != null ? (int) contract.InternalReadType : 0) { case 0: while (reader.Read()) { if (reader.TokenType != JsonToken.Comment) return true; } return false; case 1: reader.ReadAsInt32(); break; case 2: reader.ReadAsBytes(); break; case 3: reader.ReadAsString(); break; case 4: reader.ReadAsDecimal(); break; case 5: reader.ReadAsDateTime(); break; default: throw new ArgumentOutOfRangeException(); } return reader.TokenType != JsonToken.None; }