using System; using System.ComponentModel; using System.Reflection; using System.Text.Json; using System.Text.Json.Serialization; namespace Jellyfin.Extensions.Json.Converters; /// /// Json unknown enum converter. /// /// The type of enum. public class JsonDefaultStringEnumConverter : JsonConverter where T : struct, Enum { private readonly JsonConverter _baseConverter; /// /// Initializes a new instance of the class. /// /// The base json converter. public JsonDefaultStringEnumConverter(JsonConverter baseConverter) { _baseConverter = baseConverter; } /// public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.IsNull() || reader.IsEmptyString()) { var customValueAttribute = typeToConvert.GetCustomAttribute(); if (customValueAttribute?.Value is null) { throw new InvalidOperationException($"Default value not set for '{typeToConvert.Name}'"); } return (T)customValueAttribute.Value; } return _baseConverter.Read(ref reader, typeToConvert, options); } /// public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) { _baseConverter.Write(writer, value, options); } }