@@ -17,27 +17,27 @@ namespace Analogy.LogViewer.ElasticCommonSchema.DataTypes
1717 /// </summary>
1818 public class LogEventReader : IDisposable
1919 {
20- private static readonly MessageTemplateParser Parser = new MessageTemplateParser ( ) ;
21- private readonly TextReader _text ;
22- private readonly JsonSerializer _serializer ;
23- private readonly IMessageFields _messageFields ;
24- private int _lineNumber ;
20+ private static readonly MessageTemplateParser Parser = new MessageTemplateParser ( ) ;
21+ private readonly TextReader _text ;
22+ private readonly JsonSerializer _serializer ;
23+ private readonly IMessageFields _messageFields ;
24+ private int _lineNumber ;
2525
2626 /// <summary>
2727 /// Construct a <see cref="LogEventReader"/>.
2828 /// </summary>
2929 /// <param name="text">Text to read from.</param>
3030 /// <param name="messageFields"></param>
3131 /// <param name="serializer">If specified, a JSON serializer used when converting event documents.</param>
32- public LogEventReader ( TextReader text , IMessageFields messageFields , JsonSerializer serializer = null )
32+ public LogEventReader ( TextReader text , IMessageFields messageFields , JsonSerializer serializer = null )
3333 {
3434 _messageFields = messageFields ;
3535 _text = text ?? throw new ArgumentNullException ( nameof ( text ) ) ;
3636 _serializer = serializer ?? CreateSerializer ( ) ;
3737 }
3838
3939 /// <inheritdoc/>
40- public void Dispose ( )
40+ public void Dispose ( )
4141 {
4242 _text . Dispose ( ) ;
4343 }
@@ -48,7 +48,7 @@ public void Dispose()
4848 /// <param name="result"></param>
4949 /// <returns>True if an event could be read; false if the end-of-file was encountered.</returns>
5050 /// <exception cref="InvalidDataException">The data format is invalid.</exception>
51- public bool TryRead ( out ParsingResult result )
51+ public bool TryRead ( out ParsingResult result )
5252 {
5353 var line = _text . ReadLine ( ) ;
5454 _lineNumber ++ ;
@@ -79,7 +79,7 @@ public bool TryRead(out ParsingResult result)
7979 /// <param name="document">The event in compact-JSON.</param>
8080 /// <param name="serializer">If specified, a JSON serializer used when converting event documents.</param>
8181 /// <returns>The log event.</returns>
82- public LogEvent ReadFromString ( string document , JsonSerializer serializer = null )
82+ public LogEvent ReadFromString ( string document , JsonSerializer serializer = null )
8383 {
8484 if ( document == null )
8585 {
@@ -96,7 +96,7 @@ public LogEvent ReadFromString(string document, JsonSerializer serializer = null
9696 /// </summary>
9797 /// <param name="jObject">The deserialized compact-JSON event.</param>
9898 /// <returns>The log event.</returns>
99- public static LogEvent ReadFromJObject ( JObject jObject , IMessageFields messageFields )
99+ public static LogEvent ReadFromJObject ( JObject jObject , IMessageFields messageFields )
100100 {
101101 if ( jObject == null )
102102 {
@@ -106,7 +106,7 @@ public static LogEvent ReadFromJObject(JObject jObject, IMessageFields messageFi
106106 return ReadFromJObject ( 1 , jObject , messageFields ) ;
107107 }
108108
109- private static LogEvent ReadFromJObject ( int lineNumber , JObject jObject , IMessageFields messageFields )
109+ private static LogEvent ReadFromJObject ( int lineNumber , JObject jObject , IMessageFields messageFields )
110110 {
111111 var timestamp = GetRequiredTimestampField ( lineNumber , jObject , messageFields . Timestamp ) ;
112112
@@ -192,7 +192,7 @@ private static LogEvent ReadFromJObject(int lineNumber, JObject jObject, IMessag
192192 return new LogEvent ( timestamp , level , exception , parsedTemplate , properties ) ;
193193 }
194194
195- private static Exception TryPopulateException ( string header , Exception exception , JObject data )
195+ private static Exception TryPopulateException ( string header , Exception exception , JObject data )
196196 {
197197 if ( data . TryGetValue ( "ExceptionDetail" , out var info ) )
198198 {
@@ -206,7 +206,7 @@ private static Exception TryPopulateException(string header, Exception exception
206206 return new TextException ( header ) ;
207207 }
208208
209- private static bool TryGetOptionalField ( int lineNumber , JObject data , string field , out string value )
209+ private static bool TryGetOptionalField ( int lineNumber , JObject data , string field , out string value )
210210 {
211211 JToken token ;
212212 if ( ! data . TryGetValue ( field , out token ) || token . Type == JTokenType . Null )
@@ -224,7 +224,7 @@ private static bool TryGetOptionalField(int lineNumber, JObject data, string fie
224224 return true ;
225225 }
226226
227- private static DateTimeOffset GetRequiredTimestampField ( int lineNumber , JObject data , string field )
227+ private static DateTimeOffset GetRequiredTimestampField ( int lineNumber , JObject data , string field )
228228 {
229229 if ( ! data . TryGetValue ( field , out var token ) || token . Type == JTokenType . Null )
230230 {
@@ -238,8 +238,11 @@ private static DateTimeOffset GetRequiredTimestampField(int lineNumber, JObject
238238 {
239239 return offset ;
240240 }
241-
242- return ( DateTime ) dt ;
241+ if ( dt is DateTime time )
242+ {
243+ return new DateTimeOffset ( time , TimeSpan . Zero ) ;
244+ }
245+ return DateTimeOffset . MinValue ;
243246 }
244247
245248 if ( token . Type != JTokenType . String )
@@ -251,7 +254,7 @@ private static DateTimeOffset GetRequiredTimestampField(int lineNumber, JObject
251254 return DateTimeOffset . Parse ( text ) ;
252255 }
253256
254- private static JsonSerializer CreateSerializer ( )
257+ private static JsonSerializer CreateSerializer ( )
255258 {
256259 return JsonSerializer . Create ( new JsonSerializerSettings
257260 {
0 commit comments