Пользовательский атрибут, копирующий функциональность атрибута JsonIgnore.C#

Место общения программистов C#
Ответить
Anonymous
 Пользовательский атрибут, копирующий функциональность атрибута JsonIgnore.

Сообщение Anonymous »

Я хочу создать пользовательский атрибут, который по сути делает то же самое, что и [JsonIgnore] из System.Text.Json, но имеет другое имя.
Причина этого в том, что у нас есть виртуальные свойства, которые, помимо прочего, никогда не следует (де)сериализовать.
Наличие [VirtualProperty] атрибут, по моему мнению, будет более полезен разработчикам, чтобы увидеть, что происходит, и исключит возможность наличия свойства, помеченного как virtual, но не имеющего атрибута [JsonIgnore].
Обратите внимание, что под virtual я не имею в виду ключевое слово C# virtual, это просто выбранный нами термин. для описания определенного типа свойства.
Что я пробовал
  • Создание пользовательского атрибута, который наследуется от JsonIgnoreAttribute.

    Это не компилируется, поскольку 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»