更改API控制器中的JsonSerializerSettings

时间:2017-06-26 13:16:29

标签: json.net asp.net-core-webapi

我正在创建一个基本的WebAPI控制器,我的大多数控制器都是固有的。该控制器需要通过添加特定的Json Contract解析器来修改JsonSerializerSettings。

在控制器本身内执行此操作非常重要,因为在创建合同时,我需要访问HttpRequest以及注入的服务。

目前我只是覆盖Ok(对象值)方法:

  public override OkObjectResult Ok(object value)
  {
     var resolver = new TranslationContractResolver(_translationService, language);

     // serialize the object, and in doing so will translate all translatable properties.
     string json = JsonConvert.SerializeObject(
        value,
        Formatting.None,
        new JsonSerializerSettings { ContractResolver = resolver });

     // now, deserialize back so we can respect content requests (XML, etc).
     Type type = value.GetType();
     var deserializedBack = JsonConvert.DeserializeObject(json, type);

   return base.Ok(deserializedBack);

这确实有效,但我确信我的表现受到了打击。

我想在OnActionExecuting方法中添加合约解析器,但我不知道如何以正确的方式访问JsonOptions配置。我已经能够从HttpContext获取IServiceProvider,然后从提供程序中获取IOptions(JsonOptions),并直接覆盖SerializationSettings。但这似乎非常hacky,它似乎在其他控制器中保留了响应的设置。

0 个答案:

没有答案