簡體   English   中英

自定義ContractResolver在使用JSON.NET序列化JSON時不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM