2015-04-23 4 views
0

У меня возникла проблема с получением значений из свойства типа viewmodel, в котором я перехожу. Это мой текущий метод, я считаю, что имя свойства хранится правильно, но я похоже, не может заставить ценность работать. Любые советы будут очень признательны. Я считаю, что у меня будут проблемы со словарем, когда тип значения также не всегда является строкой, но это еще одна проблема для более позднего :).Получить значение из свойства в цикле foreach

Здесь метод принимает в типе ViewModel:

public Type ConvertModel(Type mytype) { 
      Dictionary<string,string> dic = new Dictionary<string,string>(); 

      foreach (var prop in mytype.GetProperties()) 
      { 
       dic.Add(prop.Name, prop.GetValue(mytype,null).ToString()); 
      } 

      //return mytype; 
     } 

Это, как этот метод вызывается (Игнорировать имя метода Я просто пытаюсь идею из):

public ActionResult Index() 
     { 
      var viewmodel = new myViewModel() 
      { 
       FirstName = "Shawn", 
       LastName = "Michaels" 
      }; 

      var newType = ConvertModel(viewmodel.GetType()); 

      return View(); 
     } 

Образец вывода состоит в том, что в конце концов я верну еще одну модель, связанную с viewModel (например, UserViewModel и UserModel, где UserModel будет заполнен свойствами и значениями UserViewModel, за исключением того, что метод должен содержать цистерну в любых 2 связанных моделях, как указано выше.)

+3

Вам необходимо разместить свой тип и образец ou tput, чтобы было легче понять – CarbineCoder

+0

Я отредактировал эту информацию. – Shawn

ответ

1

Причина свойство может быть пустым, затем поднимите ошибку, так что вы можете сделать один из следующих вариантов:

Updateing

Просто убедитесь, что вы передаете экземпляр объекта вместо типа:

Вместо этого общественного типа ConvertModel (тип MyType) {

использование ниже кода

public T ConvertModel<T>(T obj) 
{ 
    var dic = new Dictionary<string,object>(); 
    foreach (var prop in obj.GetType().GetProperties()) 
    { 
     dic.Add(prop.Name, prop.GetValue(obj,null)); 
    } 

Первое: Создать словарь в obejct

var dic = new Dictionary<string,object>(); 
foreach (var prop in obj.GetType().GetProperties()) 
{ 
    dic.Add(prop.Name, prop.GetValue(obj,null)); 
} 

Второе: Вы можете бросить в строку и если не может бросить поместить нуль в Словаре

foreach (var prop in obj.GetType().GetProperties()) 
{ 
    dic.Add(prop.Name, (string)prop.GetValue(obj,null)); 
} 

Или

foreach (var prop in mytype.GetProperties()) 
{ 
    dic.Add(prop.Name, Convert.ToString(prop.GetValue(mytype,null))); 
} 
+0

Я попытался ответить выше, я получаю следующую ошибку при добавлении в словарь. Исключение типа «System.Reflection.TargetException» произошло в mscorlib.dll, но не было обработано в коде пользователя – Shawn

+1

Какой из них дает вам эту ошибку? – Peyman

+1

Это другая ошибка, вместо этого вы должны передать экземпляр – Peyman

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