diff --git a/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/DtoUtil.cs b/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/DtoUtil.cs new file mode 100644 index 00000000..9392a372 --- /dev/null +++ b/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/DtoUtil.cs @@ -0,0 +1,12 @@ +namespace Recyclarr.Cli.Pipelines.QualityProfile.Api; + +public static class DtoUtil +{ + public static void SetIfNotNull(ref T propertyValue, T? newValue) + { + if (newValue is not null) + { + propertyValue = newValue; + } + } +} diff --git a/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/QualityProfileDto.cs b/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/QualityProfileDto.cs index 78067483..01c89140 100644 --- a/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/QualityProfileDto.cs +++ b/src/Recyclarr.Cli/Pipelines/QualityProfile/Api/QualityProfileDto.cs @@ -3,17 +3,6 @@ using JetBrains.Annotations; namespace Recyclarr.Cli.Pipelines.QualityProfile.Api; -public static class DtoUtil -{ - public static void SetIfNotNull(ref T propertyValue, T? newValue) - { - if (newValue is not null) - { - propertyValue = newValue; - } - } -} - [UsedImplicitly] public record QualityProfileDto { diff --git a/src/Recyclarr.Json/JsonSerializationModifiers.cs b/src/Recyclarr.Json/JsonSerializationModifiers.cs index a53ef344..e4e5181a 100644 --- a/src/Recyclarr.Json/JsonSerializationModifiers.cs +++ b/src/Recyclarr.Json/JsonSerializationModifiers.cs @@ -9,33 +9,15 @@ public sealed class JsonNoSerializeAttribute : Attribute public static class JsonSerializationModifiers { - private static bool HasAttribute(JsonPropertyInfo? prop, IReadOnlyDictionary> allAttrs) - where T : Attribute - { - if (prop is null) - { - return false; - } - - if (!allAttrs.TryGetValue(prop.Name, out var attrs)) - { - return false; - } - - return attrs.Any(x => x.IsAssignableTo(typeof(T))); - } - public static void IgnoreNoSerializeAttribute(JsonTypeInfo type) { - var attrs = type.Properties - .Select(x => (Property: x, Attributes: x.PropertyType.GetCustomAttributes(false).Select(y => y.GetType()))) - .Where(x => x.Attributes.Any()) - .ToDictionary(x => x.Property.Name, x => x.Attributes); + var propertiesToRemove = type.Properties + .Where(x => x.AttributeProvider?.IsDefined(typeof(JsonNoSerializeAttribute), false) ?? false) + .ToList(); - var props = type.Properties; - foreach (var prop in props) + foreach (var prop in propertiesToRemove) { - prop.ShouldSerialize = (_, _) => !HasAttribute(prop, attrs); + prop.ShouldSerialize = (_, _) => false; } } }