using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace ChatController.LoginKlassen { public class TimeStampConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException("Nicht implementiert, da nicht benötigt."); } public override object ReadJson(JsonReader reader, Type objectType, object messageJson, JsonSerializer serializer) { switch(reader.TokenType) { case JsonToken.Null: return null; case JsonToken.StartObject: { var jsonObject = JObject.Load(reader); var date = jsonObject["date"]?.ToString(); var timeZoneType = jsonObject["timezone_type"]?.ToObject(); var timeZone = jsonObject["timezone"]?.ToString(); if(date is null || timeZoneType is null || timeZone is null) { return null; } return new LastMessageTimeStamp(date, timeZoneType.Value, timeZone); } case JsonToken.Date: { if(reader.Value is null) { return null; } return DateTime.TryParse(reader.Value.ToString(), out var timestamp) ? new LastMessageTimeStamp(timestamp.ToString("dd.MM.yyyy HH:mm:ss.ffffff"), 3, "UTC") : null; } default: return null; } } public override bool CanRead => true; public override bool CanWrite => false; public override bool CanConvert(Type objectType) { return typeof(LastMessageTimeStamp).IsAssignableFrom(objectType); } } }