【发布时间】:2011-02-13 19:36:25
【问题描述】:
在尝试用 javascript 手动格式化我的 JSON 数据并惨遭失败后,我意识到可能有更好的方法。以下是 C# 中 Web 服务方法和相关类的代码:
[WebMethod]
public Response ValidateAddress(Request request)
{
return new test_AddressValidation().GenerateResponse(
test_AddressValidation.ResponseType.Ambiguous);
}
...
public class Request
{
public Address Address;
}
public class Address
{
public string Address1;
public string Address2;
public string City;
public string State;
public string Zip;
public AddressClassification AddressClassification;
}
public class AddressClassification
{
public int Code;
public string Description;
}
Web 服务在使用 SOAP/XML 时效果很好,但我似乎无法使用 javascript 和 jQuery 获得有效响应,因为我从服务器返回的消息与我的手动编码 JSON 存在问题。
我不能使用 jQuery getJSON 函数,因为请求需要 HTTP POST,所以我改用较低级别的 ajax 函数:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://bmccorm-xp/HBUpsAddressValidation/AddressValidation.asmx/ValidateAddress",
data: "{\"Address\":{\"Address1\":\"123 Main Street\",\"Address2\":null,\"City\":\"New York\",\"State\":\"NY\",\"Zip\":\"10000\",\"AddressClassification\":null}}",
dataType: "json",
success: function(response){
alert(response);
}
})
ajax 函数正在提交data: 中指定的所有内容,这就是我的问题所在。如何在 javascript 中构建格式正确的 JSON 对象,以便可以将其插入到我的 ajax 调用中,如下所示:
data: theRequest
我最终会从表单中的文本输入中提取数据,但目前硬编码的测试数据很好。
如何构建格式正确的 JSON 对象以发送到 Web 服务?
更新:事实证明,我的请求的问题不在于 JSON 的格式,因为 T.J.指出,而是我的 JSON 文本不符合 Web 服务的要求。这是基于 WebMethod 中的代码的有效 JSON 请求:
'{"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}'
这又引出了另一个问题:When is case sensitivity important in JSON requests to ASP.NET web services (ASMX)?
【问题讨论】:
-
完全 OT,但是看看你的
data: "{\"Address\":{\"Address1\" ... }";,记住在 Javascript 中你可以使用单引号来分隔你的字符串,这样会变得更具可读性:data: '{"Address":{"Address1" ... }',(当然,请确保转义数据中出现的任何'字符,但至少比"字符少很多。 -
@T.J.我很欣赏这个小费。我的 javascript 新手颜色正在显示 :-)
-
:-) 关于 JSON 与 Javascript 对象文字表示法的问题,请向 jhurshman 提出问题,该回答已被删除:JSON 是 Javascript 对象文字表示法的子集,有关详细信息,请参阅 json.org .但它们非常相似(当然)。在您引用的代码中,您输出的字符串是完全有效的 JSON。 (这个网站有时很有用:jsonlint.com)
-
@T.J.感谢您提供指向 jsonlint 的链接。前几天整个下午我都希望有这样的工具。
-
我认为您不会收到编辑通知,所以:我想到了为什么它可能会拒绝您的(有效)JSON 并更新了我的答案——它可能期待一个对象是一个地址,而不是一个包含地址的具有“地址”属性的对象? (详见答案。)
标签: c# javascript jquery web-services json