/// <summary> /// Reads the JSON representation of the object. /// </summary> /// <param name="reader">The <see cref="JsonReader"/> to read from.</param> /// <param name="objectType">Type of the object.</param> /// <returns>The object value.</returns> public override object ReadJson(JsonReader reader, Type objectType) { if (reader.TokenType != JsonToken.StartConstructor || string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0) { throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType, reader.Value)); } reader.Read(); if (reader.TokenType != JsonToken.Integer) { throw new Exception("Unexpected token parsing date. Expected Integer, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } long ticks = (long)reader.Value; DateTime d = JavaScriptConvert.ConvertJavaScriptTicksToDateTime(ticks); reader.Read(); if (reader.TokenType != JsonToken.EndConstructor) { throw new Exception("Unexpected token parsing date. Expected EndConstructor, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } if (objectType == typeof(DateTimeOffset)) { return(new DateTimeOffset(d)); } return(d); }
///<summary> ///</summary> ///<param name="reader"></param> ///<param name="objectType"></param> ///<returns></returns> public override object ReadJson(JsonReader reader, Type objectType) { string dateTimeText = (string)reader.Value; dateTimeText = dateTimeText.Substring(1, dateTimeText.Length - 2); long javaScriptTicks = Convert.ToInt64(dateTimeText); return(JavaScriptConvert.ConvertJavaScriptTicksToDateTime(javaScriptTicks)); }