2014-02-04 4 views
0

У меня есть метод, который выглядит следующим образом:Получить свойство объекта из значения строки

public string Bid(AdapterRequest adapterRequest) 
{ 
    string property = "adapterRequest.Lead.Contact.ZipCode"; 
    string zipCode = ??? 
} 

Как я могу получить значение adapterRequest.Lead.Contact.ZipCode из значения строки?

+1

и это, который покрывает вложенные свойства/сложные типы специфически http://stackoverflow.com/questions/366332/best-way-to-get-sub- properties-use-getproperty –

+0

@JamesGaunt - связанный с вами вопрос был именно тем, что мне нужно. Благодарю. – Scott

ответ

-3
string zipCode = (string)adapterRequest.GetType().GetProperty(property).GetValue(adapterRequest, null); 

Обратите внимание, что это не будет работать в вашем случае, поскольку у вас есть объект herarchy, но вы можете разделить собственность на части и получить объекты один за другим и повторить запрос для следующей части на последнем возвращенном объекте - GetType будет работать с ненулевым значением.

+0

Это не будет работать для вложенных свойств сложных типов. – Haney

+0

Это не будет работать для вложенных свойств в соответствии с вопросом. –

+0

@DavidHaney да, я устал, редактируя ответ сейчас ... – Bogdan

1

Вы можете использовать отражение с помощью рекурсии:

public string Bid(AdapterRequest adapterRequest) 
{ 
    string propertyChain = "Lead.Contact.ZipCode"; 
    string zipCode = ResolvePropertyChain(propertyChain.Split('.').ToList(), adapterRequest) as string; 
    // ... assuming other logic exists here ... 
} 

public object ResolvePropertyChain(List<string> propertyChain, object source) 
{ 
    object propertyValue = null; 

    if (source != null) 
    { 
     propertyValue = source.GetType().GetProperty(propertyChain[0]).GetValue(source, null); 

     if (propertyValue != null && propertyChain.Count > 1) 
     { 
      List<string> childPropertyChain = new List<string>(propertyChain); 
      childPropertyChain.RemoveAt(0); 
      propertyValue = ResolvePropertyChain(childPropertyChain, propertyValue); 
     } 
    } 

    return propertyValue; 
} 
Смежные вопросы