Можно ли в .NET использовать отражение для получения всех ненаследуемых методов класса?
-
28-10-2019 - |
Вопрос
Из-за этой проблемы здесь я пытаюсь написать собственный JsonConverter, которыйобрабатывает случаи, когда вы подклассифицируете список или коллекцию, а затем добавляете к ним дополнительные свойства.Таким образом, можно было бы игнорировать все свойства базового класса и сериализовать только те, которые находятся в определенном классе.(Технически это не сработает, потому что если вы подклассифицируете этот подкласс, вы нарушите сериализацию, но это заставило меня задуматься ...)
Возможно ли с помощью отражения (я знаю, что ответ - «да», потому что Reflector делает именно это, но я не знаю, как) получить только те члены, которые определены в самом классе, а не те, которые былипо наследству?Например ...
родовое слово В данном случае я хочу поразмышлять о MySubClass
и получить только SubProp1
и SubProp2
, игнорируя BaseProp1
и BaseProp2
.Так может быть , как это делается?
M
Решение
При вызове метода GetMembers для получения членов типа вы можете указать DeclaredOnly во флаге привязки.
Другие советы
Вы должны выбрать все элементы в MySubClass
и оставить только те, где DeclaringType == MySubClass
.
С LINQ что-то вроде этого (излишество):
родовое словоИли с перегрузкой кодового кода:
родовое слово MemberInfo.DeclaringType
должен делать то, что вам нужно..Чтобы члены были напрямую определены в типе X, отфильтруйте элементы по генеракодичному коду.