C# 在外部条件C下不序列化字段
我需要在REST响应中获取子集。我怎样才能做到? 例如,我们有一门课: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; } } 和可变布
[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);
}
}