diff --git a/backend/src/Designer/Helpers/JsonConverterHelpers/OptionConverterHelper.cs b/backend/src/Designer/Helpers/JsonConverterHelpers/OptionConverterHelper.cs new file mode 100644 index 00000000000..a15ad94deeb --- /dev/null +++ b/backend/src/Designer/Helpers/JsonConverterHelpers/OptionConverterHelper.cs @@ -0,0 +1,38 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Altinn.Studio.Designer.Helpers.JsonConverterHelpers; + +public class OptionConverter : JsonConverter +{ + public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return reader.TokenType switch + { + JsonTokenType.String => reader.GetString(), + JsonTokenType.Number when reader.TryGetDouble(out double d) => d, + JsonTokenType.True => true, + JsonTokenType.False => false, + _ => throw new JsonException($"Unsupported JSON token for Option.Value: {reader.TokenType}") + }; + } + + public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) + { + switch (value) + { + case string s: + writer.WriteStringValue(s); + break; + case double d: + writer.WriteNumberValue(d); + break; + case bool b: + writer.WriteBooleanValue(b); + break; + default: + throw new JsonException("Unsupported type for Option.Value."); + } + } +} diff --git a/backend/src/Designer/Models/Option.cs b/backend/src/Designer/Models/Option.cs index 20a05548cf5..ddfa6b9559e 100644 --- a/backend/src/Designer/Models/Option.cs +++ b/backend/src/Designer/Models/Option.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; +using Altinn.Studio.Designer.Helpers.JsonConverterHelpers; namespace Altinn.Studio.Designer.Models; @@ -13,7 +14,8 @@ public class Option /// [Required] [JsonPropertyName("value")] - public string Value { get; set; } + [JsonConverter(typeof(OptionConverter))] + public object Value { get; set; } /// /// Label to present to the user. diff --git a/backend/src/Designer/Services/Implementation/OptionsService.cs b/backend/src/Designer/Services/Implementation/OptionsService.cs index f2e225c2d83..f1834c3156a 100644 --- a/backend/src/Designer/Services/Implementation/OptionsService.cs +++ b/backend/src/Designer/Services/Implementation/OptionsService.cs @@ -73,7 +73,7 @@ public async Task> UploadNewOption(string org, string repo, string List