【发布时间】:2015-02-25 21:22:24
【问题描述】:
我已将骆驼外壳配置为 Newtonsoft 库的默认 JSON 输出。在 Application_Start 期间调用了以下行:
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
对 WebAPI 的所有 javascript REST 调用(使用 WebAPI 2)都可以正常工作,并将驼峰格式的 JSON 字符串返回给客户端。
现在,我在我的一个网页上使用 jTable 控件 (http://www.jtable.org),并且此控件要求以 正确案例 返回 JSON 有效负载。 所以问题是 即使通过 Application_Start 的默认配置设置为驼峰式大小写,我如何可以选择更改 WebAPI 以返回正确大小写 JSON 有效负载,而不更改全局默认设置是什么? 我需要为应用程序中的这一 WebAPI 调用返回正确的 JSON 有效负载。
我已经尝试过 [http://fizzylogic.nl/2014/07/30/changing-the-casing-of-json-properties-in-asp-dot-net-web-api/] 这个,但我无法让 ActionFilterAttribute.OnActionExecuting 触发。所以解决方案没有奏效。
我还在 WebAPI 方法中添加了以下代码行
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(new JsonMediaTypeFormatter());
这可行,但正确大小写现在成为其他 WebAPI 调用的默认格式。
这是 WebAPI sn-p
public JTableDtoImpl Get(int id, int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = "") {
List<MobileOrderModel> orders = _svc.GetMobileOrders(id);
var dto = new JTableDtoMobileOrdersImpl(orders, jtStartIndex, jtPageSize) {
Message = string.Format("DataSource:{0}", _svc.DataSource)
};
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(new JsonMediaTypeFormatter());
return dto;
}
这里的问题是我现在无法恢复到默认的驼峰格式,因为那时方法已经返回。
还有其他建议吗?
【问题讨论】:
-
如果您有三种方法,例如 A、B 和 C,您是否需要在任何/所有方法中动态更改大小写,还是只需要始终为方法 C 运行 Pascal case?
-
我只需要为方法 C 运行 Pascal 案例(总是)。其他方法应继续使用驼峰式的默认设置。
-
您可能会让您的方法返回一个字符串,并在正文中使用
JsonSerializer直接传递您想要/需要的任何设置。这不应该影响其他一切的全局设置。 -
正确。返回一个字符串可能是一个有效的解决方案,但我正在寻找一个更优雅的解决方案,我希望 Newtonsoft.Json 可以提供。到目前为止, Request.CreateResponse() 方法是我要使用的解决方案。谢谢。
标签: c# .net json asp.net-web-api2