相关疑难解决方法(0)

何时区分大小写在对ASP.NET Web服务(ASMX)的JSON请求中很重要?

我已经使用发送到ASP.NET 2.0 ASMX Web服务的JSON请求(使用AJAX Extensions 1.0 for ASP.NET 2.0)完成了以下测试,看起来区分大小写在某些情况下很重要,但在其他情况下则不然.请参阅以下示例:

  • 案例匹配100%:

    {"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    
    Run Code Online (Sandbox Code Playgroud)

    结果: HTTP/1.1 200 OK

  • 包含的对象名称的大小写Address不匹配:

    {"request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    
    Run Code Online (Sandbox Code Playgroud)

    结果: HTTP/1.1 200 OK

  • Web服务参数的大小写request不匹配:

    {"Request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    
    Run Code Online (Sandbox Code Playgroud)

    结果: HTTP/1.1 500 Internal Server Error

(快速注意:类Request和参数request共享相同名称的事实不是相关的.即使我将参数名称更改为lrequest,仍然需要区分大小写.)

JSON Web Service请求中的区分大小写何时重要?此外,这是一般的Web服务问题还是特定于ASP.NET AJAX?


其他背景资料:

我正在使用适用于ASP.NET 2.0的AJAX Extensions 1.0,因此可能已在更高版本的框架中解决了这个问题.如果是这样,请告诉我.

在我最近关于格式化JSON字符串的问题的答案之后,我意识到我的请求失败的原因并不是因为无效的JSON(感谢TJ Crowder指出并链接到http:// www. jsonlint.com/用于JSON验证).相反,在做了一些更多的测试之后,我了解到问题是因为Web服务不是我的JSON对象的格式化方式,而且我发现Web服务在区分大小写方面非常挑剔.似乎有时案例敏感性很重要,而有时则不是(见上面的例子).

以下是我的Web方法和类的C#代码:

[WebMethod]
public Response ValidateAddress(Request request) …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net ajax json web-services

23
推荐指数
1
解决办法
5万
查看次数

JSON.NET JToken键区分大小写?

我不得不使用JSON.NET执行一些自定义反序列化,我发现它将JToken中的键值视为区分大小写.这是一些代码:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
     JToken token = JToken.Load(reader);
     JToken version = token["version"];

     string ver = version.ToObject<string>();

     return new MyVersion(ver);
}
Run Code Online (Sandbox Code Playgroud)

version即使json在顶层包含一个版本元素,该变量仍为null,它只是大写:

{
    "VERSION" : "1.0",
    "NAME" : "john smith"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用JToken不区分大小写的键?或者也许没有JToken它的另一种方法可以让我抓住并反序列化各个属性?

编辑:

根据评论我最终做到了这一点:

JObject token = JObject.Load(reader);
string version = token.GetValue("version", StringComparison.OrdinalIgnoreCase).ToObject<string>(serializer);
Run Code Online (Sandbox Code Playgroud)

c# json json.net

6
推荐指数
2
解决办法
2263
查看次数

标签 统计

json ×2

ajax ×1

asp.net ×1

c# ×1

javascript ×1

json.net ×1

web-services ×1