using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; namespace Jellyfin.Extensions.Json.Converters { /// /// Json comma delimited collection converter factory. /// /// /// This must be applied as an attribute, adding to the JsonConverter list causes stack overflow. /// public class JsonCommaDelimitedCollectionConverterFactory : JsonConverterFactory { /// public override bool CanConvert(Type typeToConvert) { return typeToConvert.IsArray || (typeToConvert.IsGenericType && (typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyCollection<>)) || typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyList<>)))); } /// public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0]; return (JsonConverter?)Activator.CreateInstance(typeof(JsonCommaDelimitedCollectionConverter<>).MakeGenericType(structType)); } } }