我剛剛度過了自己的痛苦,我需要一個每個請求的作品。您可以使用該方法並返回相同的媒體格式器。我發現將GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver
設置爲格式化程序對於每個請求的需求有點不可靠,即使我嘗試在該類的單個實例中處理每個請求的需求。不過你可以嘗試設置你的ContractResolver實例有,在App_Start代碼
我結束了創建自定義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 code 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){
...
}
由斯科特艾倫幫忙嗎[這篇短文](http://odetocode.com/blogs/scott/archive/2013/03/25/asp-net-webapi-tip-3-camelcasing-json.aspx)? – Jonesopolis
偉大的文章,雖然我想避免更改JsonConverter的全局設置。這[鏈接](http://decompile.it/blog/2011/08/08/overriding-the-default-serialization-behavior-in-json-net/)[鏈接]看起來不錯,我正在測試它出。 –