AdlsDotNetSDK/Serialization/ServerDateTimeConverter.cs (41 lines of code) (raw):

using Newtonsoft.Json; using Newtonsoft.Json.Converters; using NLog; using System; namespace Microsoft.Azure.DataLake.Store.Serialization { internal class ServerDateTimeConverter : DateTimeConverterBase { private static readonly Logger DateTimeConverterLogger = LogManager.GetLogger("adls.dotnet.ServerDateTimeConverter"); public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.Integer) { throw new Exception( String.Format("Unexpected token parsing date. Expected Integer, got {0}.", reader.TokenType)); } var ticks = (long)reader.Value; if(ticks < 0) { return null; } try { return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Add(new TimeSpan(ticks * 10000)); } catch(ArgumentOutOfRangeException ex) { if (DateTimeConverterLogger.IsDebugEnabled) { DateTimeConverterLogger.Debug($"Exception: {ex.Message} Ticks: {ticks}"); } return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } } }