Пользовательский атрибут, копирующий функциональность атрибута 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#»