2012-04-09 25 views
3

我正在用WCF開發Rest網絡服務。不要在JSON響應上發送空值

我有以下合約:

namespace ADM.Contracts 
    { 
     [DataContract] 
     public class FormContract 
     { 
      [DataMember] 
      public int FormId { get; set; } 

      [DataMember] 
      public string FormName { get; set; } 

      [DataMember] 
      public List<BlockContract> blocks { get; set; } 
     } 

} 

有時候,塊是空的,我發送此JSON:

[ 
    { 
     "FormId": 1, 
     "FormName": "Formulario 1", 
     "blocks": null 
    }, 
    { 
     "FormId": 2, 
     "FormName": "Formulario 2", 
     "blocks": null 
    }, 
    { 
     "FormId": 3, 
     "FormName": "Formulario 3", 
     "blocks": null 
    } 
] 

我能避免發送"blocks": null

我正在開發一個Android客戶端來解析JSON數據。我該如何處理null

+0

請注意,不要在公共API合約上使用List。使用IEnumerable或ICollection,如果你真的需要使用IList。 – 2012-04-09 16:17:10

+1

爲什麼我不能使用列表? – VansFannel 2012-04-09 16:29:11

回答

4

通過添加到DataMember屬性,您應該能夠避免發送列表成員的默認值(即null)。

[DataMember(Name = "blocks", IsRequired=false, EmitDefaultValue=false)] 
public List<BlockContract> blocks { get; set; } 

但是,請記住,null是JSON有效的值,當存在​​這樣的可能性,有可能是沒有連接到您的實體數據的處理方式。這可能僅僅是在你的JavaScript更容易有一個if條件,如:

for(var i = 0; i < data.length; ++i) { 
    if (data[i].blocks != null) { 
     //do stuff 
    } else { 
     //no blocks. do other stuff 
    } 
} 

編輯:我想指出的是,如果你需要檢查,如果有問題的數據成員具有已定義的模塊列表,你將很可能不得不採用後一種方法檢查塊成員是否爲空。

0

你有幾個我看到的選項。

  1. 繼續在JSON中發送空值並檢查客戶端是否爲空,並在那裏處理它。

  2. 檢查資源類中的無效性,併發送其他內容(空對象,帶空字段的新對象,帶佔位符字段的對象)。

  3. 只是不包含空的對象。 (即發送FormId和FormName字段但沒有塊字段的對象)。

無論您選擇什麼,在您的API中進行交流都非常重要,如果不存在某些事情會發生。並保持一致。