У меня есть следующий сценарий:
У меня есть составной объект, который включает в себя списки, я хочу передать путь к нему, как - Result.CustomerList.Name
Результат являетсяобъект, который содержит список клиентов, но также содержит много других списков различных типов.Я хочу получить Имена клиентов в этом конкретном случае.
Что у меня есть до сих пор
private static object GetPropertyValue(this object obj, string propertyPath)
{
var fullPath = propertyPath.Split('.');
for (int i = 0; i <= fullPath.Length - 1; i++)
{
if (obj == null) { return null; }
var part = fullPath[i];
Type type = obj.GetType();
PropertyInfo propInfo = type.GetProperty(part);
if (propInfo == null)
{
//if its a list
if (obj.GetType().GetInterfaces().Any(
k => k.IsGenericType
&& k.GetGenericTypeDefinition() == typeof(IEnumerable<>)))
{
//get list generic argument
var argumentType = obj.GetType().GetGenericArguments()[0];
//cast obj to List of argumentType
}
else return null;
}
obj = propInfo.GetValue(obj, null);
}
return obj;
}
Я не могу получить синтаксис или как привести к списку или списку это не такработа или список
Я не понимаю, что мне не хватает или как это сделать.
EDIT :: Во время выполнения может быть CustomerList, AddressList или PaymentList или любой другой тип списка.Мне нужен метод, чтобы иметь возможность получить значение свойства в любом типе списка во время выполнения.
EDIT2 :: Пример объекта Result
public class SearchResults
{
public List<Customer> Customers { get; set; }
public List<Payment> Payments { get; set; }
public List<Address> Addresses{ get; set; }
public int totalCount { get; set; }
public bool success { get; set; }
}
public class Customer
{
public string Name { get; set; }
public long Id { get; set; }
}
public class Payment
{
public string BankName{ get; set; }
public long Id { get; set; }
}
Так что путь, как Result.Payments.BankName должен вернуть мне что угодно.Проблема в том, что я не могу сделать метод универсальным для доступа к любому из списков.