我正在使用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
?
答案 0 :(得分:6)
您应该能够通过添加到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
}
}
编辑:我想指出,如果你需要检查有问题的数据成员是否定义了一个阻止列表,你很可能必须选择后一个选项来检查阻塞成员是不为空。
答案 1 :(得分:0)
我看到了几个选项。
继续在JSON中发送空值并检查客户端的无效,并在那里处理它。
检查资源类中的无效并发送其他内容(空对象,带空字段的新对象,带占位符字段的对象)。
只是不要包含null的对象。 (即发送一个带有FormId和FormName字段但没有阻止字段的对象。)
无论您选择什么,在您的API中进行沟通非常重要,如果某些内容不存在,将会发生什么。并保持一致。