2015-03-18 3 views
0

Я пытаюсь перебрать свойства объекта и значения и построить с ними строку. Проблема я не могу показаться, чтобы получить доступ к значениям свойств, которые не являются струна ...Как получить доступ к значениям свойств subObject в C#

Вот что я до сих пор:

private string ObjectToStringArray(CustomType initParameters) 
    { 
     var stringArray = ""; 

     foreach (var parameter in initParameters.GetType().GetProperties()) 
     { 
      if (parameter.PropertyType.Name == "String") 
       stringArray += "\"" + parameter.Name + "\" => \"" + parameter.GetValue(initParameters) + "\",\r\n"; 
      else 
      { 
       stringArray += "array(\r\n"; 
       foreach (var subParameter in parameter.PropertyType.GetProperties()) 
       { 
        stringArray += "\"" + subParameter.Name + "\" => \"" + subParameter.GetValue(parameter) + "\",\r\n"; 
       } 
       stringArray += "),"; 
      } 
     } 

     return stringArray; 
    } 

я могу добраться до значений всех строки свойства, но один уровень вниз, я просто не могу извлечь сам объект свойства.

Мое исключение: System.Reflection.TargetException: Object не соответствует типу цели.

+0

Каков результат/исключение, что вы ожидали? (вы можете обновить свой вопрос) –

ответ

1

При вызове subParameter.GetValue(parameter), вы передаете PropertyInfo, в то время как вы, казалось бы, хотите передать значение этого свойства для initParameters вместо.

Вы должны таким образом передать parameter.GetValue(initParameters) вместо subParameter.GetValue().

+0

В этом заключается проблема, как мне получить доступ к этому значению? Использование 'initParameters' возвращает ту же самую эксклюзию. – RealGigex

+0

@RealGigex Так же, как вы выводите значение строки, вызывая 'parameter.GetValue (initParameters)', так что вы должны получить фактическое значение свойства, а не его 'PropertyInfo', вызывая' parameter.GetValue (initParameters) ' , Этот вызов означает, что «для этого типа свойства получает значение для указанного экземпляра, который содержит это свойство» _. Другими словами, 'subParameter.GetValue (параметр.GetValue (initParameters))', а не только 'subParameter.GetValue (initParameters)'. Просто пытаюсь понять, что происходит. ; p P.s. вы, вероятно, можете использовать рекурсию для ее реализации. –

+0

Спасибо! это сделал трюк! Мне также не хватало нулевой валидации на вспомогательных объектах. – RealGigex

Смежные вопросы