2012-08-03 45 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 2012-08-03 19:23:49

+0

這就是我最初做的,但它失敗了。如果只有一個項目,數組的長度始終爲零。如果我將它創建爲一個對象,那麼它將適用於單個項目。 – MCR 2012-08-03 19:29:25

+0

我嚴重懷疑數組的長度爲零,如果你傳遞和數組與一個項目。 – Paparazzi 2012-08-03 20:12:41

回答

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; }