2015-01-04 25 views
1

我試圖循環傳遞給模型對象中的視圖的數據。我想列出每個模型屬性的屬性名稱和屬性值,即使它們爲空。我一直在這裏待了幾個小時,並嘗試使用Google搜索,但無法獲得任何可行的示例。循環模型數據並列出它

我得到這個,列出所有當前對象的屬性,但不能獲取值:

@model List<object> 
@foreach (var obj in Model) 
{ 
    var properties = obj.GetType().GetProperties(); 
    foreach (var property in properties) 
    { 
    string name = null; 
    var value = "" 
    try 
    { 
     name = property.Name; 
     value = property.GetType().GetProperty(property.Name).GetValue(property, null).ToString(); 
    } 
    catch (Exception e) 
    { 
     <p>@e</p> 

    } 
    finally 
    { 
     <p>@name - @value</p> 
    } 

} 

而控制器代碼:

  RootobjectPlayerData obj = JsonConvert.DeserializeObject<RootobjectPlayerData>(jsonstring); 
      List<object> list = new List<object>(); 
      list.Add(obj.data.accountinfo); 
      list.Add(obj.data.accountinfo.statistics); 
      list.Add(obj.data.accountinfo.statistics.clan); 
      list.Add(obj.data.accountinfo.statistics.company); 
      list.Add(obj.data.accountinfo.statistics.all); 
      list.Add(obj.data.accountinfo.statistics.historical); 
      list.Add(obj.data.accountinfo.statistics.team); 
      return View(list); 

我能夠做斷點並查看每個對象中的所有數據,但是我無法在屏幕上打印出來。

+0

你會得到任何輸出嗎? – 2015-01-04 10:54:49

+0

是的,列出所有的屬性,然後由於我的catch塊列出了一個例外。我試着用我正在嘗試做的事情來googleing這個異常,並且無法弄清楚。 'System.NullReferenceException:對象引用未設置爲對象的實例。「# – electrometro 2015-01-04 10:57:37

+0

你的變量名讓你失望。如果你使用更多的描述性變量,你的錯誤會更清晰。 – 2015-01-04 11:01:03

回答

1

首先你得到的屬性值不正確。你應該從屬性的類型得到你有對象的值,而不是:

value = obj.GetType().GetProperty(property.Name).GetValue(obj, null) 

其次,只有通過數據,這不是空嘗試循環:

@foreach (var obj in Model.Where(w => w != null)) 
+0

- 編輯。對不起,我剛剛意識到你也改變了前面的x。我只是再次嘗試你的解決方案,我得到了一個不同的例外。 'System.Reflection.TargetException:對象與目標類型不匹配。' – electrometro 2015-01-04 11:00:52

+0

你確定所有的列表變量都不爲空嗎? – 2015-01-04 11:01:57

+0

所以我再次使用了錯誤的變量。這是有效的。 '值= i.GetType()的getProperty(x.Name).GetValue(I,空)的ToString();' 然而,它仍然會偶爾拋出一個空的異常。我將不得不弄清哪些是拋出異常。 '.Where(w => w!= null)'沒有修復幾個空的。但是,我獲得了大部分數據,所以我現在就站在我的腳邊。謝謝! – electrometro 2015-01-04 11:16:08

0

嘗試獲得的值來自i,而不是x

try 
{ 
    name = x.Name; 
    // Wrong 
    // value = x.GetType().GetProperty(x.Name).GetValue(x, null).ToString(); 
    // Correct 
    value = x.GetValue(i, null).ToString(); 
} 
catch (Exception e) 
{ 
    <p>@e</p> 

} 
+0

謝謝!這是正確的答案。 – electrometro 2015-01-04 11:18:25