2015-01-04 24 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