简体   繁体   中英

Passing data to ASP.Net webservice with JSON

I would like to know how could I use JSON for passing data from jquery to a web-services?

I mean what kind of datatype should I use as input for the webservice if the length of the array are dynamically changed all the time for example the number of route serial and number of boarding location for a route, below is one of the example.

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

Also I would like to know what kind of format is asp.net expecting, so that I could correct my coding accordingly , thank you in advance for any comment and reply.

You can create JSON enabled WCF services. Here is simple tutorial to get you started.

I realize this question was asked some time ago, and that there are a plethora of ways to solve this in ASP.Net. What I've typically done is use WebMethods on aspx pages. You can also use an asmx Web Services file too - Robert does a good job explaining that here .

For something like the structure above I use generics and structs in C# to make it easier to handle the data on the server-side in a similar manor the data is handled in JavaScript. Also makes it easier to serialize the JSON. I realize there is some initial overhead to doing it this way. My goal would be to make it as easy in C# to work with the data on the server-side as it is on the front-end with JavaScript.

I Reference the following namespaces In addition to those added automatically in VS2010:

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

I then define the following structs:

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;
}

Below is an example of the 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" };
}

The script method, AddRouteData , is expecting the structure outlined above via HTTP POST. If you would be using sing a GET request the method arguments would be query string variables.

Caveats

In using ScriptMethods with ASP.Net, you need to be sure that the Content-Type header is set to: application/json; charset=utf-8 application/json; charset=utf-8 whether you are using a GET or POST request.

Hope that helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM