Вам просто нужно вызвать GetValue
для объекта inputColumn
следующим образом:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Dictionary<string, string> body = new Dictionary<string, string>();
foreach (PropertyInfo inputColumn in Row.GetType().GetProperties())
{
if (!inputColumn.Name.EndsWith("IsNull"))
{
body.Add(inputColumn.Name,
(string)inputColumn.GetValue(Row));
}
}
}
Вы можете упростить весь метод с помощью небольшого количества Linq, а также сделать его обобщенным c как this:
public void ProcessRow<T>(T item)
{
var body = typeof(T) // Get the type
.GetProperties() // Get all properties
.Where(p => !p.Name.EndsWith("IsNull")) // Exclude properties ending with "IsNull"
.ToDictionary( // Return a dictionary
p => p.Name,
p => (string) p.GetValue(item));
}
Вы могли бы быть еще безопаснее, если бы вызывали только те свойства, которые возвращают строковые значения, с дополнительным предложением Where
:
.Where(p => p.PropertyType == typeof(string))
Или если вы хотите включите другие типы свойств (например, int
), затем вам нужно будет вернуться к использованию ToString
:
p => p.GetValue(item).ToString()
Таким образом, вы можете повторно использовать этот метод для других типов объектов.