省略 wcf rest 模板 40 中的空值/默认值



我有一个使用 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; }
}

这工作正常,除了如果一个属性为空,例如两个 DateTime 对象,json 仍然包含这些值。我希望省略它们。我尝试添加[DataMember(EmitDefaultValue=false)][DataMember(IsRequired=true)](我在读入时没有使用默认序列化程序,所以我认为无论如何我都不需要它),但它似乎不起作用。有没有人对此有任何经验并知道某种解决方法?

当类也用 [DataContract] 修饰时,才会强制执行[DataMember]属性。你可以这样做,但是一旦你进入数据协定路由,那么序列化就变成了一个"选择加入"模型:你还需要使用 [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) 才能使用数据协定。

最新更新