3

我正在使用 WCF 开发一个 Rest web 服务。

我有以下合同:

    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

4

2 回答 2

6

您应该能够null通过添加到 DataMember 属性来避免发送列表成员的默认值(即 )。

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

编辑:我想指出,如果您需要检查相关数据成员是否定义了块列表,您很可能必须使用后一种检查块成员是否为空的选项。

于 2012-04-09T16:12:24.593 回答
0

我看到你有几个选择。

  1. 继续在 JSON 中发送空值并在客户端检查空值,并在那里处理它。

  2. 检查资源类中的无效性并发送其他内容(空对象、具有空字段的新对象、具有占位符字段的对象)。

  3. 只是不要包含为空的对象。(即发送一个带有 FormId 和 FormName 字段但没有 blocks 字段的对象)。

无论您选择什么,重要的是在您的 API 中传达如果某些东西不存在会发生什么。并保持一致。

于 2012-04-09T16:12:30.240 回答