我有一个使用 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) 才能使用数据协定。