2015-04-23 105 views
0

我遇到了一个问题,即从传入的类型viewmodel的属性获取值。这是我当前的方法,我相信该属性的名称存储正确,但我似乎无法获得工作价值。任何建议将不胜感激。我相信当字典的值不总是一个字符串时,我会遇到字典问题,但这对于以后来说是另一个问题:)。从foreach循环中的属性获取值

这里是方法采取在视图模型类型:

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让我更容易理解 – CarbineCoder

+0

我用那个信息编辑过。 – Shawn

回答

1

原因属性可以为null,则引发错误,所以你可以做的其中一个选项:

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

我尝试了上面的答案,添加到字典时出现以下错误。 mscorlib.dll中发生类型'System.Reflection.TargetException'的异常,但未在用户代码中处理 – Shawn

+1

哪一个给出了该错误? – Peyman

+1

这是一个不同的错误,而不是通过类型,你应该通过实例 – Peyman