我只是费尽心思弄清楚自己,而我需要一个可以按要求工作的人。您可以使用该方法,只返回相同的媒体格式化程序。我发现将格式化程序设置
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver为对于每个请求的需求都不可靠,即使我尝试在该类的单个实例中处理每个请求的需求。但是,您可以尝试在App_Start代码中的某个位置设置ContractResolver实例。
我最终创建了一个自定义
JsonMediaTypeFormatter,该自定义检查是否为请求配置了ContractResolver,您可以只返回一个和相同的解析器:
public class DynamicJsonMediaTypeFormatter : JsonMediaTypeFormatter{ public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, System.Net.Http.HttpRequestMessage request, System.Net.Http.Headers.MediaTypeHeaderValue mediaType){// shown is getting the current formatter, but you can return an instance you prefer var formatter = base.GetPerRequestFormatterInstance(type, request, mediaType) as JsonMediaTypeFormatter;// Here I had more pre to get the resolver based on request, skipped ((JsonMediaTypeFormatter)formatter).SerializerSettings.ContractResolver = <YourContractResolverInstance>; return formatter;}}我想您已经知道了这部分内容,但是您的合同解析器可以覆盖`CreateProperties’并让您自己的逻辑来决定将显示哪些json属性以及它们将使用什么名称(为完整性和其他读者的利益而添加):
public class DynamicContractResolver : DefaultContractResolver{... protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization){ ...}


