在我的JS中,我使用Jquery的$ ajax函数来调用Web服务并将jsonified数据发送给它。数据采用以下格式:
var countries = {
"1A": {
id: "1A",
name: "Andorra"
},
"2B": {
id: 2B
name: "Belgium"
},
..etc
};
var jsonData = JSON.stringify({ data: data });
//然后调用$ ajax并调用c#web服务
在c#端,Web服务需要解压缩此数据,目前它以string [] []数据类型的形式出现。如何将其转换为格式,以便我可以参考诸如
之类的属性.id和.name?假设我有一个名为Sample的类具有这些属性? 谢谢!
编辑:
这是我的JS代码:
var jsonData = JSON.stringify(countries);
$.ajax({
type: 'POST',
url: 'http://localhost/MyService.asmx/Foo',
contentType: 'application/json; charset=utf-8',
data: jsonData,
success: function (msg) {
alert(msg.d);
},
error: function (xhr, status) {
switch (status) {
case 404:
alert('File not found');
break;
case 500:
alert('Server error');
break;
case 0:
alert('Request aborted');
break;
default:
alert('Unknown error ' + status);
}
}
});
在c#web服务中我有:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Collections;
using System.IO;
using System.Web.Script.Services;
[WebMethod]
[ScriptMethod]
public string Foo(IDictionary<string, Country> countries)
{
return "success";
}
答案 0 :(得分:2)
我不知道你在说什么string[][]
,它来自哪里,但最好是使用强类型。因此,定义一个将为数据建模的自定义类型:
public class Country
{
public string Id { get; set; }
public string Name { get; set; }
}
然后让web方法使用字典:
[WebMethod]
[ScriptMethod]
public string Foo(IDictionary<string, Country> countries)
{
// Here you will have countries["1A"].Name = "Andorra" and
// countries["2B"].Name = Belgi
...
return "success";
}
然后只需调用此方法(请参阅UPDATE
以获取正确的数据):
<击> 撞击>
<击>var data = {
"1A": {
id: "1A",
name: "Andorra"
},
"2B": {
id: 2B
name: "Belgi"
}
};
击> <击> 撞击>
$.ajax({
type: 'POST',
url: '/myservice.asmx/Foo',
contentType: 'application/json; charset=utf-8',
data: { JSON.stringify(data) },
success: function(msg) {
alert(msg.d);
}
});
更新:
实际上请求的格式应该是这样的:
var data = {
countries: {
"1A": {
id: "1A",
name: "Andorra"
},
"2B": {
id: "2B",
name: "Belgium"
}
}
};
答案 1 :(得分:0)
你试过JavaScriptSerializer吗?正如您所说,假设您有一个具有这些属性的类,它应该/可能{/ 3}} JSON字符串为该类型。