2012-08-03 2 views
2

JSON 응답을 구문 분석 할 클래스를 만들었습니다. 내가 가지고있는 문제는 한 항목이 때때로 배열이고 다른 항목이 객체라는 것입니다. 해결 방법을 찾으려고했지만 항상 다른 문제를 일으켰습니다.배열 또는 객체인지 확인

나는 무엇이 만들어 지는지 결정할 수있는 if 또는 try 문을 갖고 싶습니다. 댄의 코드를 사용하여

의사 ...

[DataContract] 
    public class Devices 
    { 
     if(isArray){ 
     [DataMember(Name = "device")] 
     public Device [] devicesArray { get; set; }} 

     else{ 
     [DataMember(Name = "device")] 
     public Device devicesObject { get; set; }} 
    } 

나는 다음과 같은 해결책을했다,하지만 지금은 내가 캐스팅 문제가 그것을 사용하려고 할 때. "입력 유형 '으로 System.Object'의 개체를 캐스팅 할 수 없습니다 'MItoJSON.Device'는"

[DataContract] 
    public class Devices 
    { 
     public object target; 

     [DataMember(Name = "device")] 
     public object Target 
     { 
      get { return this.target; } 

      set 
      { 
       this.target = value; 

       var array = this.target as Array; 
       this.TargetValues = array ?? new[] { this.target }; 
      } 
     } 

     public Array TargetValues { get; private set; } 
    } 
+3

단일 항목의 경우 하나의 항목이있는 배열이됩니다.이 배열은 하나의 항목을 가진 배열이됩니다. – Oded

+0

그것이 내가 원래하고 있었던 것이지만 작동하지 못했습니다. 항목이 하나만있는 경우 배열의 길이는 항상 0입니다. 객체로 만든 경우에는 단일 항목에 대해 작동합니다. – MCR

+0

하나의 항목을 전달하고 배열하는 경우 배열의 길이가 0이라는 사실을 심각하게 의심합니다. – Paparazzi

답변

1

은 객체로 대상 속성을 선언합니다.

private object target; 

    public object Target 
    { 
     get { return this.target; } 

     set 
     { 
      this.target = value; 

      var array = this.target as Array; 
      this.TargetValues = array ?? new[] { this.target }; 
     } 
    } 

    public Array TargetValues { get; private set; } 
관련 문제