C# 在外部条件C下不序列化字段

C# 在外部条件C下不序列化字段,c#,rest,serialization,request,response,C#,Rest,Serialization,Request,Response,我需要在REST响应中获取子集。我怎样才能做到? 例如,我们有一门课: [DataContract] public class Response { [DataMember] public string id { get; set; } [DataMember] public string href { get; set; } [DataMember] public string name { get; set; } } 和可变布

我需要在REST响应中获取子集。我怎样才能做到? 例如,我们有一门课:

[DataContract]
public class Response
{
    [DataMember]        
    public string id { get; set; }
    [DataMember]
    public string href { get; set; }
    [DataMember]
    public string name { get; set; }
}
和可变布尔标志

在我的回答中,如果flag等于true,我只需要href和id字段。如果flag等于false,我应该返回所有字段

我的GET方法是通过以下代码实现的:

public interface IRestServiceImpl
{    
    [OperationContract]        
    [WebInvoke(Method = "GET",
         ResponseFormat = WebMessageFormat.Json,
         RequestFormat = WebMessageFormat.Json,
         BodyStyle = WebMessageBodyStyle.Bare,
         UriTemplate = "Response/{*id}?fields={fieldsParam}")]
}
此功能是支持字段请求参数所必需的

我找到了非序列化的EmitDefaultValue属性,但它仅适用于默认值


我应该自定义序列化程序或数据属性吗?

这可以使用Newtonsoft完成

要有条件地序列化属性,请添加一个返回 与属性同名的布尔值,然后为方法添加前缀 使用ShouldSerialize的名称。方法的结果决定是否 属性已序列化。如果该方法返回true,则 属性将被序列化,如果返回false,则该属性 将跳过


不幸的是,它不能与默认序列化程序一起工作。我使用answer来更改我的GET方法。在那之后它就开始工作了。
public class Employee
{
    public string Name { get; set; }
    public Employee Manager { get; set; }

    public bool ShouldSerializeManager()
    {
        // don't serialize the Manager property if an employee is their own manager
        return (Manager != this);
    }
}