2
我实现了一个自定义IContractResolver,以便可以从Web API动态过滤出对象上的某些属性。例如,操作GetEmployees将过滤掉每个退回的员工的“Id”属性。Web API自定义IContractResolver
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
}
实现此目的的最佳方法是什么?
因此,循环访问数据库中请求的员工并创建要返回的专用对象的新列表? – 2013-04-09 13:16:20
是的。特殊情况下的特殊数据对象。就个人而言,我不是直接返回数据库对象的粉丝(不管他们是否是POCO),我将这些对象从DTO对象中分离出来。 – JustAnotherUserYouMayKnow 2013-04-09 13:28:24