Json 忽略wcf rest模板40中的空/默认值
我有一个使用WCF REST模板40的web服务。按照我的数据设置方式,任何东西都没有Json 忽略wcf rest模板40中的空/默认值,json,wcf,rest,Json,Wcf,Rest,我有一个使用WCF REST模板40的web服务。按照我的数据设置方式,任何东西都没有[DataContract]或[DataMember]属性,它只是类及其公共属性。例如: public class Permission : ServiceClass { public int PermissionID { get; set; } public string PermissionName { get; set; }
[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)]
(我在读取时没有使用默认序列化程序,因此我认为我无论如何都不需要它),而且它似乎不起作用。有没有人有过这方面的经验并知道一些解决方法?[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)可能也必须更改以使用数据协定。只需将默认序列化更改为json.net,并使其忽略空值和默认值。解决了。谢谢,我最终使用了JSON.net并手动序列化,但我会再试一次,并确保按照您所说的进行注释。