Ваш класс в настоящее время содержит поля, а не свойства.
Пример поля:
private string _myField;
Примеры объектов:
public string MyField {get;set;}
public string MyField { get { return _myField; } set { _myField = value; } }
public string MyField => _myField;
Поскольку это разные вещи, существуют разные способы их отражения. Вы можете получить поля и свойства отдельно:
foreach (var field in type.GetFields())
{
}
foreach (var property in type.GetProperties())
{
}
или вы можете получить «членов», и для каждого участника определить, является ли это свойство или поле:
foreach (var member in type.GetMembers(System.Reflection.BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.GetField))
{
if (member is FieldInfo fi)
{
}
else if (member is PropertyInfo pi)
{
}
}
** Если вы хотите найти свойства или поля, вы можете установить , вам может потребоваться изменить флаги привязки.
Обратите внимание, что с точки зрения дизайна поля должны быть защищены или закрыты. Чтобы предоставить данные из вашего класса, вы должны в идеале использовать свойства. Подробнее об этом здесь .