1

我有一个使用 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)]and [DataMember(IsRequired=true)](我在读入时没有使用默认的序列化程序,所以我认为我不需要它)但它似乎不起作用。有没有人有这方面的经验并知道某种解决方法?

4

1 回答 1

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)可能也必须更改才能使用数据合同。

于 2013-01-28T20:39:31.277 回答