ASP.NET WebAPI JSON绑定案例敏感性

从ASP.NET WebAPI Beta升级到RC已经提供了一些兴奋和很多挫折感。 我已经能够解决大多数问题,但是现在正在咬我的是JSON请求数据的区分大小写。

用于JSON请求的格式化程序(默认情况下是JSON.NET格式化程序)似乎区分大小写,而用于表单urlencoded数据的格式化程序则不区分大小写。 有没有办法配置JSON请求以使用不区分大小写的格式化程序?

这是一个简单的例子来说明我对JSON请求的问题:

HTML / JavaScript

  $(function () { $("#tester").on("click", function() { $.ajax({ type: "POST", url: "/Api/Test/Index/" + 168, data: ko.toJSON({ key: 123, value: "test value" }), // THIS FAILS // Key: 123, Value: "test value" <- BUT THIS WORKS contentType: "application/json; charset=utf-8", statusCode: { 200: function () { $("body").append("

Success

"); }, 400: function () { $("body").append("

Failure

"); } } }).always(function () { $("body").append("
"); }); }); });

C#

 public class TestController : ApiController { public HttpResponseMessage Index(int? id, KeyValuePair test) { if (id != 168 || test.Key != 123 || test.Value != "test value") return Request.CreateResponse(HttpStatusCode.BadRequest); return Request.CreateResponse(HttpStatusCode.OK); } } 

我已经提供了关于提供JSON数据的行的注释。 我宁愿不通过适当的shell属性成员来破坏我的JavaScript对象的约定,我当然不希望通过降低我的C#属性来破坏约定。 有什么想法吗?

Json.NET格式化程序对反序列化(json – > CLR)不区分大小写。

在序列化时,您可以使用CamelCasePropertyNamesContractResolver获取骆驼shell。

在你的Global.asax中:

 var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

在深入研究这个问题后,我开始意识到我在Json.NET KeyValuePair转换器中遇到了一个错误。 James Newton-King非常友好地回答了我的相关问题并提供了修复的链接:

Json.NET不区分大小写的属性反序列化