diff --git a/Calendar/Service/Models/NationalDays/Entry.cs b/Calendar/Service/Models/NationalDays/Entry.cs index 6ce8f08..9b233f6 100644 --- a/Calendar/Service/Models/NationalDays/Entry.cs +++ b/Calendar/Service/Models/NationalDays/Entry.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using System.Text.Json.Serialization; namespace ChrisKaczor.HomeMonitor.Calendar.Service.Models.NationalDays; @@ -6,7 +7,11 @@ namespace ChrisKaczor.HomeMonitor.Calendar.Service.Models.NationalDays; public class Entry { public string Name { get; set; } = string.Empty; + public string Url { get; set; } = string.Empty; + + [JsonConverter(typeof(StringOrBooleanConverter))] public string Excerpt { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; } \ No newline at end of file diff --git a/Calendar/Service/StringOrBooleanConverter.cs b/Calendar/Service/StringOrBooleanConverter.cs new file mode 100644 index 0000000..121ceac --- /dev/null +++ b/Calendar/Service/StringOrBooleanConverter.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace ChrisKaczor.HomeMonitor.Calendar.Service; + +public class StringOrBooleanConverter : JsonConverter +{ + public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return reader.TokenType switch + { + JsonTokenType.True => string.Empty, + JsonTokenType.False => string.Empty, + JsonTokenType.String => reader.GetString() ?? string.Empty, + _ => throw new JsonException($"Unexpected token type: {reader.TokenType}") + }; + } + + public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) + { + if (bool.TryParse(value, out var boolValue)) + { + writer.WriteBooleanValue(boolValue); + } + else + { + writer.WriteStringValue(value); + } + } +} \ No newline at end of file