using System; using System.Text.Json; using System.Text.Json.Serialization; namespace gehGassi.Web.Helper { public class DateTimeOffsetJsonConverter : JsonConverter { public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTimeOffset.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) { writer.WriteStringValue(value.UtcDateTime.ToString("o")); } } public class NullableDateTimeOffsetJsonConverter : JsonConverter { public override DateTimeOffset? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var valueToParse = reader.GetString(); if(!string.IsNullOrWhiteSpace(valueToParse)) return DateTimeOffset.Parse(valueToParse); return null; } public override void Write(Utf8JsonWriter writer, DateTimeOffset? value, JsonSerializerOptions options) { if(value.HasValue) writer.WriteStringValue(value.Value.UtcDateTime.ToString("o")); writer.WriteStringValue(string.Empty); } } public class DateOnlyJsonConverter : JsonConverter { public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateOnly.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("o")); } } public class NullableDateOnlyJsonConverter : JsonConverter { public override DateOnly? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var valueToParse = reader.GetString(); if (!string.IsNullOrWhiteSpace(valueToParse)) return DateOnly.Parse(valueToParse); return null; } public override void Write(Utf8JsonWriter writer, DateOnly? value, JsonSerializerOptions options) { if (value.HasValue) writer.WriteStringValue(value.Value.ToString("o")); writer.WriteStringValue(string.Empty); } } }