2015-04-23 47 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