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