我有一个使用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)]
(我在阅读时没有使用默认的序列化程序,所以我认为无论如何我都不需要它)并且它似乎不起作用。有没有人有过这方面的经验并知道某种解决方法?
答案 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)可能也必须更改为使用数据合同。