C# 使用JSON.NET序列化JSON时自定义ContractResolver不工作
我有一个自定义的ContractResolver,它可以序列化选择性属性。在每个客户机请求上,我将创建一个实例,传递一个布尔值(取决于条件),并将其设置为JsonFormatter的ContractResolverC# 使用JSON.NET序列化JSON时自定义ContractResolver不工作,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我有一个自定义的ContractResolver,它可以序列化选择性属性。在每个客户机请求上,我将创建一个实例,传递一个布尔值(取决于条件),并将其设置为JsonFormatter的ContractResolver GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DynamicContractResolver(false); 调试时,永远不会
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DynamicContractResolver(false);
调试时,永远不会命中受保护的重写IList CreateProperties(Type Type,MemberSerialization MemberSerialization)方法
我不明白为什么新的ContractResolver没有在JsonFormatter中设置
另外,设置新ContractResolver的方法如下所示:
[HttpGet]
public CustObj GetInfo(string param)
我真的不能像returnrequest.CreateResponse(HttpStatusCode.OK,result,formatter)这样做代码>因为我需要返回CustObj
注意:我正在Global.asax.cs
文件中设置JsonFormatter。我意识到应用程序正在使用自定义的ContentCongregator
,因此重置json格式化程序不起作用。在Global.asax文件中设置了contentcongregator
,如下所示
GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
因此,对于控制器中的每个请求,我调用这个方法,它基本上替换了现有的contentcongregator
private void SetNewJsonFormatterWithCustomContractResolver(bool returnMVFormat)
{
//Create a new JsonMediaTypeFormatter
var newJsonFormatter = new JsonMediaTypeFormatter();
newJsonFormatter.SerializerSettings = new JsonSerializerSettings()
{
ContractResolver = new DynamicContractResolver(returnMVFormat)
};
GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(newJsonFormatter));
}