Причина этого в том, что у нас есть виртуальные свойства, которые, помимо прочего, никогда не следует (де)сериализовать.
Наличие [VirtualProperty] атрибут, по моему мнению, будет более полезен разработчикам, чтобы увидеть, что происходит, и исключит возможность наличия свойства, помеченного как virtual, но не имеющего атрибута [JsonIgnore].
Обратите внимание, что под virtual я не имею в виду ключевое слово C# virtual, это просто выбранный нами термин. для описания определенного типа свойства.
Что я пробовал
- Создание пользовательского атрибута, который наследуется от JsonIgnoreAttribute.
Это не компилируется, поскольку JsonIgnoreAttribute является закрытым классом - Создание пользовательского атрибута, копирующего реализацию JsonIgnoreAttribute:
Это не работает, и свойства по-прежнему сериализуются (да, я использую System.Text.JsonSerializer, а не Newtonsoft или какой-либо другой;))
Код: Выделить всё
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] public class VirtualPropertyAttribute : JsonAttribute { public JsonIgnoreCondition Condition { get; set; } = JsonIgnoreCondition.Always; }
Код: Выделить всё
global using VirtualProperty = System.Text.Json.Serialization.JsonIgnoreAttribute;
Как мне это сделать? Почему мой пользовательский атрибут не работает?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ctionality
Мобильная версия