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();
}
}