设置Api.Controller.Json函数以使用Global SerializerSettings

时间:2016-11-24 00:59:42

标签: asp.net-web-api json.net

在ASP.NET Web API控制器中,我使用JsonResults,如下所示:

sp.call('adb shell "cd /d/asoc/*snd-card*/*_code* && echo %s %s > code_reg"'%(regs,vals), shell=True)

我在WebApiConfig中设置了全局默认设置,正如我在许多地方所建议的那样。

return Json(data);

我认为这会使设置被使用,但事实并非如此。为了解决这个问题,我打电话:

HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());

这样可以正常工作,但我是否遗漏了一些使全局序列设置始终适用的内容?

1 个答案:

答案 0 :(得分:2)

通过调用Json(数据),您正在执行此重载 - 您可以看到它正在创建一个新的序列化器设置实例

    protected internal JsonResult<T> Json<T>(T content)
    {
        return Json<T>(content, new JsonSerializerSettings());
    }

如果您使用其中一个返回协商结果的ApiController方法(例如ApiController.Ok,例如return Ok(data)),则会从全局配置中解析格式化程序,您将看到所需的行为。