![](/img/trans.png)
[英]Can I use a custom ContractResolver when serializing with Json.Net's JObject.FromObject method?
[英]Custom ContractResolver not working while serializing JSON using JSON.NET
我有一個自定義的ContractResolver,可序列化選擇屬性。 在每個客戶端請求上,我正在創建一個傳遞布爾值(取決於條件)的實例,並將其設置為JsonFormatter的ContractResolver。
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DynamicContractResolver(false);
調試時,永遠不會命中protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
方法。
我無法弄清楚為什么沒有在JsonFormatter中設置新的ContractResolver。
另外,設置新的ContractResolver的方法如下所示:
[HttpGet]
public CustObj GetInfo(string param)
我真的不能做類似return Request.CreateResponse(HttpStatusCode.OK, result, formatter);
因為我需要返回CustObj
。
注意:我正在Global.asax.cs
文件中設置JsonFormatter。
我意識到該應用程序正在使用自定義ContentNegotiator
因此無法重置json格式化程序。 ContentNegotiator
在Global.asax文件中的設置如下。
GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
因此,對於控制器中的每個請求,我都調用此方法,該方法基本上替代了現有的ContentNegotiator
。
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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.