Web API custom IContractResolver

本文关键字:IContractResolver custom API Web | 更新日期: 2023-09-27 18:08:28

我实现了一个自定义的IContractResolver,这样我就可以从我的Web API中动态地过滤掉对象上的某些属性。例如,GetEmployees操作将过滤掉返回的每个员工的"Id"属性。

public IEnumerable<Employee> GetEmployees()
{
    var ignoreList = new List<string> {"Id"};
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList);
    return db.Employees.AsEnumerable();
}

问题是,在相同的方法中,我想将契约解析器设置回其默认值。像这样:

public IEnumerable<Employee> GetEmployees()
{
    var defaultContractResolver = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver;
    var ignoreList = new List<string> {"Id"};
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList);
    // Serialize object
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = defaultContractResolver;
    // return serialized object
}

实现这一点的最佳方法是什么?

Web API custom IContractResolver

这绝对不是你尝试的方式。你将运行在线程问题。

一种方法是修改返回的对象,使其不包含Id -属性。相反,制作一个更专门的对象。这是我要走的路。

或者,您可以直接返回HttpResponseMessage并将内容设置为您喜欢的任何内容。但是你必须自己处理序列化和内容否定。

相关文章:
  • 没有找到相关文章