C# ASP.NET WebAPI JSON绑定区分大小写

C# ASP.NET WebAPI JSON绑定区分大小写,c#,asp.net-web-api,json.net,C#,Asp.net Web Api,Json.net,从ASP.NET WebAPI Beta版升级到RC版带来了一些兴奋和挫折。我已经解决了大部分问题,但现在困扰我的是JSON请求数据的大小写敏感性 用于JSON请求的格式化程序(默认情况下是JSON.NET格式化程序)似乎区分大小写,而用于表单URL编码数据的格式化程序则不区分大小写。有没有办法将JSON请求配置为使用不区分大小写的格式化程序 下面是一个简单的例子来说明JSON请求的问题: HTML/JavaScript <button id="tester">Click here!

从ASP.NET WebAPI Beta版升级到RC版带来了一些兴奋和挫折。我已经解决了大部分问题,但现在困扰我的是JSON请求数据的大小写敏感性

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

下面是一个简单的例子来说明JSON请求的问题:

HTML/JavaScript

<button id="tester">Click here!</button>

<script type="text/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("<p>Success</p>");
                    },
                    400: function () {
                        $("body").append("<p>Failure</p>");
                    }
                }
            }).always(function () {
                $("body").append("<hr />");
            });
        });
    });
</script>
点击这里!
$(函数(){
$(“#测试仪”)。在(“单击”,函数(){
$.ajax({
类型:“POST”,
url:“/Api/Test/Index/”+168,
data:ko.toJSON({key:123,value:“test value”}),//此操作失败

//Key:123,Value:“test Value”Json.NET格式化程序对反序列化(Json->CLR)不区分大小写

在序列化时,可以使用

在您的Global.asax中:

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

在深入研究这个问题之后,我意识到我在Json.NET KeyValuePair转换器中遇到了一个bug。James Newton King很友好地回答了我的相关问题,并提供了修复程序的链接:


我在这里有点困惑。您在POST请求中发送数据——换句话说,在请求正文中。但在HTTP文档中,头字段(和值)被视为不区分大小写,正文中没有任何内容……为什么您认为“这不是表单URL编码数据的行为?”,我想知道?例如,检查。@raina77ow这不是关于HTTP规范的问题,而是关于ASP.NET WebAPI RC使用的JSON.NET格式化程序的行为。FormUrl格式化程序似乎不区分大小写,而JSON.NET格式化程序区分大小写。我认为区分大小写是正确的。为什么在C时需要区分大小写#JavaScript和JavaScript都区分大小写?我知道它们都区分大小写,但是用于参数绑定的值提供程序或格式化程序不需要区分大小写,这可以从表单urlencoded数据的行为中得到证明。我将更新问题以反映这一点。谢谢。我相信是这样的,但我还不能我喜欢这种行为。请看我的相关问题:嗯……我刚刚对JsonConvert做了一些实验。反序列化KeyValuePair是区分大小写的,就像你说的,但是如果我创建一个POCO,这种行为肯定是不区分大小写的。似乎与KeyValuePair有getter但没有setter有关,因为我定义了自己版本的KeyValueP使用setter进行air,这很有效。啊,你可能会发现一些问题……我将做一些进一步的实验,看看是否可以确定如何使用匹配的大小写键进行反序列化。谢谢!你知道在XML中是否可以实现同样的功能吗?请参阅
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();