【发布时间】:2011-09-08 19:00:28
【问题描述】:
我正在尝试使用 JSON 和 jQuery 设置由 JavaScript 使用的 WCF Web 服务。我注意到如果服务方法参数与 JSON 对象的命名结构匹配,您可以在没有 DataContract 的情况下发送 JSON:
<ServiceContract(Namespace:="http://foo.com/bar")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class WebServices
<OperationContract()>
Public Function Test(fullname As String)
Return CustomFunctions.SerializeJSON(New With {
.SSN = "999-99-9999",
.Birthday = "9/22/1983"})
End Function
End Class
...还有 JavaScript...
$.ajax({
url: "webservices.svc/Test",
data: JSON.stringify({
"fullname" : "John Smith"
}),
type: "POST",
processType: false,
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function (result)
{
console.log(result);
},
error: function (xhr)
{
console.log(xhr.responseText);
}
});
这很好用,但如果我想向 Web 服务发送大量数据,就会出现问题。自然地,参数列表会变得非常长且丑陋。另一种方法是创建一个 DataContract。但是,我很可能会创建很多 Web 服务,并且我不想每次发送超过 5 个键值对的数据时都必须创建一个全新的 DataContract。
我希望有一种方法可以通过方法参数将传入的 JSON 对象作为 Dictionary(Of String, Object) 访问:
<OperationContract()>
Public Function Test(data As Dictionary(Of String, Object))
Dim firstName As String = data("FirstName")
Dim lastName as String = data("LastName")
'...logic goes here...
'....return JSON object
End Function
有人知道这是否可能吗?大多数人在这种情况下会做什么?我在 ASMX 中工作得很好,所以我知道这是可能的。
【问题讨论】:
标签: vb.net wcf web-services json