在wcf rest模板40中省略null / default值

时间:2013-01-28 18:57:52

标签: json wcf rest

我有一个使用WCF REST模板40的Web服务。我的数据设置方式,任何东西都没有[DataContract][DataMember]属性,它只是类和它的公共属性。例如:

public class Permission : ServiceClass
{        
    public int       PermissionID          { get; set; }
    public string    PermissionName        { get; set; }
    public string    PermissionCode        { get; set; }
    public string    PermissionDescription { get; set; }
    public bool      IsActive              { get; set; }
    public DateTime? StartDate             { get; set; }
    public DateTime? EndDate               { get; set; }
    public int       SystemID              { get; set; }
}

除了如果属性为null(例如两个DateTime对象)之外,json仍包含这些值,这样可以正常工作。我想省略它们。我曾尝试添加[DataMember(EmitDefaultValue=false)][DataMember(IsRequired=true)](我在阅读时没有使用默认的序列化程序,所以我认为无论如何我都不需要它)并且它似乎不起作用。有没有人有过这方面的经验并知道某种解决方法?

1 个答案:

答案 0 :(得分:3)

仅当该类还使用[DataMember]修饰时,才会强制执行

[DataContract]个属性。你可以这样做,但是一旦你进入数据合同路线,那么序列化就变成了一个“选择加入”模型:你还需要用[DataMember]声明其他成员:

[DataContract]
public class Permission : ServiceClass
{
    [DataMember]
    public int       PermissionID          { get; set; }
    [DataMember]
    public string    PermissionName        { get; set; }
    [DataMember]
    public string    PermissionCode        { get; set; }
    [DataMember]
    public string    PermissionDescription { get; set; }
    [DataMember]
    public bool      IsActive              { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public DateTime? StartDate             { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public DateTime? EndDate               { get; set; }
    [DataMember]
    public int       SystemID              { get; set; }
}

此外,由于此合同现在是数据合同模型的一部分,因此您的基本类型(ServiceClass)可能也必须更改为使用数据合同。