Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 忽略wcf rest模板40中的空/默认值_Json_Wcf_Rest - Fatal编程技术网

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

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; }

我有一个使用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)]
(我在读取时没有使用默认序列化程序,因此我认为我无论如何都不需要它),而且它似乎不起作用。有没有人有过这方面的经验并知道一些解决方法?

[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并手动序列化,但我会再试一次,并确保按照您所说的进行注释。