В приложении я использую разные фреймворки / технологии для сериализации / десериализации объектов. Чтобы игнорировать свойства в объектах, есть такие атрибуты, как BsonIgnore или JsonIgnore.

[JsonIgnore]
[BsonIgnore]
public bool MyProperty
{
    get;
    set; 
}

Как я могу создать атрибут, который расширяется от BsonIgnore и JsonIgnore, чтобы мне нужно было указать только один атрибут для MyProperty?

Следующее не работает, поскольку атрибут должен расширять System.Attribute.

[AttributeUsage(AttributeTargets.Class)]
public class MyIgnoreAttribute : BsonIgnore, JsonIgnore
{ ... }

-------------------------

[MyIgnore]
public bool MyProperty
{
    get;
    set; 
}
c#
0
Stephan 24 Сен 2018 в 06:07

2 ответа

Лучший ответ

C # не поддерживает множественное наследование, и каждый из этих типов - sealed, так что они не могут быть унаследованы в любом случае. Но может быть другой подход к тому, что вы пытаетесь сделать.

Если это предсказуемо, например: если что-то, имеющее один атрибут, всегда должно иметь другой атрибут; вы можете использовать аспектно-ориентированное программирование, чтобы ввести другой атрибут во время компиляции.

Ваш следующий вопрос будет «как мне это сделать?» , ответ на который будет зависеть от того, какой продукт вы используете.

После этого у вас будет вопрос «Какой продукт мне следует использовать для АОП?» , что не по теме, как показано

Richardissimo 24 Сен 2018 в 04:08