使用JSON将数据传递到ASP.Net webservice

时间:2012-02-13 18:58:20

标签: c# jquery asp.net ajax json

我想知道如何使用JSON将数据从jquery传递到Web服务?

我的意思是,如果数组的长度一直动态变化,例如路由序列号和路由的登机位置数,我应该使用什么样的数据类型作为webservice的输入,下面是其中一个例。

{ "route": [
    {
        "serial": {
        "name": " ",
        "rsn": " ",
        "boardingzone": {
                            "zone": [
                                { "name": " ",   "time": " ",   "qouta": " "   },
                                { "name": " ",   "time": " ",   "qouta": " "   },
                                { "name": " ",   "time": " ",   "qouta": " "   }
                                    ]
            },
        "destination": {
                            "zone": [
                                { "name": " " },
                                { "name": " " },
                                { "name": " " }
                        ]
            }
    }
}
] }

此外,我想知道asp.net期望的格式是什么,以便我可以相应地更正我的编码,提前感谢您的任何评论和回复。

2 个答案:

答案 0 :(得分:1)

您可以创建启用JSON的WCF服务。这是simple tutorial,可以帮助您入门。

答案 1 :(得分:0)

我意识到这个问题是在前一段时间被问到的,并且在ASP.Net中有很多方法可以解决这个问题。我通常做的是在aspx页面上使用WebMethods。您也可以使用asmx Web服务文件 - 罗伯特很好地解释了here

对于类似上面结构的东西,我在C#中使用泛型和结构,以便在类似的庄园中更容易处理服务器端的数据,数据在JavaScript中处理。还可以更容易地序列化JSON。我意识到这样做有一些初始开销。我的目标是在C#中轻松使用服务器端的数据,就像在前端使用JavaScript一样。

我引用以下命名空间 除了在VS2010中自动添加的命名空间外:

using System.Collections;
using System.Web.Services;
using System.Web.Script;
using System.Web.Script.Serialization;
using System.Web.Script.Services;

然后定义以下结构:

public struct RouteAddedResponse {
    public int? id;
    public int status;
    public string message;
}

public struct BoardingZoneDetail
{
    public string name;
    public string time;
    public string quota;
}

public struct DestinationZoneDetail
{
    public string name;
}

public struct RouteSerial
{
    public string name;
    public string rsn;
    public Dictionary<string, List<BoardingZoneDetail>> boardingzone;
    public Dictionary<string, List<DestinationZoneDetail>> destination;
}

以下是ScriptMethod

的示例
// WebMethod expects: Dictionary<string, List<Dictionary<string, RoutSerial>>>;
// Change UseHttpGet to false to send data via HTTP GET.
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet = false)]
public static RouteAddedResponse AddRouteData(List<Dictionary<string, RouteSerial>> route)
{
    // Iterate through the list... 
    foreach (Dictionary<string, RouteSerial> drs in route) {

        foreach (KeyValuePair<string,RouteSerial> rs in drs)
        {
            // Process the routes & data here.. 
            // Route Key:
            // rs.Key;
            // Route Data/Value:
            // rs.Value;
            // ... 
        }

    }

    return new RouteAddedResponse() { id = -1, status = 0, message = "your message here" };
}

脚本方法AddRouteData期望通过HTTP POST获得上述结构。如果您要使用单个GET请求,则方法参数将是查询字符串变量。

注意事项

在ASP.Net中使用ScriptMethods时,无论您使用的是GET还是POST请求,都需要确保Content-Type标头设置为:application/json; charset=utf-8

希望有所帮助!