Чтобы прочитать метаданные модели из класса, вы обычно должны создавать экземпляр DataAnnotationsModelMetadataProvider (в System.ComponentModel).
Этот класс генерирует объект ModelMetadata, который представляет собой сводку метаданных класса.
Одним из основных преимуществ этого подхода является то, что он автоматически учитывает метаданные в классах метаданных друзей.
Используя ModelMetadata, вы также вводите хорошую абстракцию между конкретными атрибутами метаданных и интерпретацией их значения. Например, если вы создаете некоторые из своих собственных атрибутов метаданных или хотите применить другие источники метаданных (например, обрабатывать все свойства, заканчивающиеся в Date, как если бы к ним применялся DataType.Date, даже если они этого не делают), вы можете создать свой собственный DataAnnotationsModelMetadataProvider, добавьте эти дополнительные правила, и весь ваш другой код работает без изменений, потому что он читает из класса ModelMetadata, а не непосредственно из знания конкретных атрибутов.