2015-01-04 3 views
1

모델 객체에서 내 뷰로 전달되는 데이터를 반복하려고합니다. null 인 경우에도 각 모델 속성의 속성 이름과 속성 값을 나열하고 싶습니다. 나는 이것에 몇 시간 동안 있었고 인터넷 검색을 시도했지만 좋은 예제를 얻을 수 없다. 모델 데이터를 반복하여 나열하십시오.

나는 그러나 값을 얻을 수 없다,이 현재 객체의 모든 속성을 나열 할 수있어 :

@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

출력물을 얻었습니까? –

+0

예, 모든 속성이 나열되고 예외가 내 catch 블록으로 인해 나열됩니다. 내가 뭘 하려는지 예외를 googleing 시도하고 알아낼 수 없었다. 'System.NullReferenceException : 객체 참조가 객체의 인스턴스로 설정되지 않았습니다. ' – electrometro

+0

변수 이름이 당신을 실망 시켰습니다. 더 많은 설명 변수를 사용하면 오류가 더 명확 해집니다. –

답변

1

먼저 속성 값이 잘못 표시됩니다. 당신은 호텔의 유형에서 당신이 가지고있는 개체에서 값을 얻을 수 있지만, 안 : 둘째

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

만 null이 아닌 데이터를 통해 루프를 시도 :

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

-Edit. 죄송 합니다만 전방에서 x를 바꿨다는 것을 깨달았습니다. 방금 솔루션을 다시 시도했지만 다른 예외가 발생했습니다. 'System.Reflection.TargetException : Object가 목표 유형과 일치하지 않습니다. ' – electrometro

+0

모든 목록 변수가 null이 아닌 것이 확실합니까? –

+0

그래서 다시 잘못된 변수를 사용했습니다. 이것이 효과가있는 것입니다. 'value = i.GetType(). GetProperty (x.Name) .GetValue (i, null) .ToString();' 그러나 여전히 가끔 null 예외가 발생합니다. 어느 것이 예외를 던지고 있는지 알아 내야 할 것입니다. '.Where (w => w! = null)'은 소수의 null 값을 수정하지 않았습니다. 그러나 나는 이제 대부분의 데이터를 얻고 있으므로 나는 지금 내 발 앞에 서있다. 감사! – electrometro

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

관련 문제