using System.Text.Json; using System.Text.Json.Serialization; using GB5Shared.JsonConverter; namespace GB5Shared.DateConverter { /// /// Central registration for GB5 JSON serialization. /// /// Type strategy: /// DateOnly — serializes natively as "yyyy-MM-dd" (.NET 7+) /// DateTimeOffset — serializes natively as ISO 8601 with offset (.NET built-in) /// DateTime — legacy only; MicrosoftDateConverter handles /Date(N)/ input /// /// No custom converters needed for DateOnly or DateTimeOffset — /// System.Text.Json produces the correct format for those types automatically. /// public static class GB5JsonOptions { /// /// Registers the DateTime legacy converter. /// DateOnly and DateTimeOffset serialize correctly without any converter. /// public static JsonSerializerOptions AddGB5Converters(this JsonSerializerOptions options) { options.Converters.Add(new MicrosoftDateConverter()); options.Converters.Add(new DateOnlyJsonConverter()); options.Converters.Add(new NullableDateOnlyJsonConverter()); options.Converters.Add(new FlexibleEnumConverterFactory()); options.Converters.Add(new FlexibleNumberConverterFactory()); options.NumberHandling = JsonNumberHandling.AllowReadingFromString; return options; } public static JsonSerializerOptions CreateDefaultOptions() => new JsonSerializerOptions { PropertyNamingPolicy = null, DictionaryKeyPolicy = null, WriteIndented = false }.AddGB5Converters(); } }