KapitanX
KapitanX

Reputation: 13

jQuery, JSON objects and .NET WebServices

I have a question about creating JSON from JQuery, sending the same by Ajax to a webservice in .NET, and how to deserialize in .NET and save to the database.

Maybe someone can give me a hand to see where I'm mistaken!

jQuery and JSON:

var myObject = {};

//** BusinessPartner **
//function BusinessPartner(prefix) {
//    this.bpCodigo = $(prefix + " option:selected").val();
//    this.bpNombre = $(prefix + "-infonombre").text();
//
//** Locations **
//function Locations(prefix) {
//    this.locCode = $(prefix + " option:selected").val();
//    this.locName = $(prefix + "-name").text();

var oNewObject = new BusinessPartner("#bp-01");
var oNewObject2 = new BusinessPartner("#bp-02");

var myLocation = [];
var oOrigin = new Locations("#receipt");
myLocation.push(oOrigin);
var oDestination = new Locations("#portloading");
myLocation.push(oOrigin);

myObject["Agent1"] = oNewObject;
myObject["Agent2"] = oNewObject;
myObject["Locations"] = myLocation;

$.ajax({
    type: "POST",
    url: "Services/ActionsDb.asmx/saveData",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(myObject),
    datatype: "json",
    success: function (response) {
        // After correct save send OK message.
    },
    error: function (xhr, status) {
        alert("An error occurred: " + status);
    }
});

The class in C# .NET

As I understand it, that should have exactly the same format as JSON received by the webservice.

public class Agent
{
    public string bpCodigo { get; set; }
    public string bpNombre { get; set; }
}
public class Location 
{
    public string locCode { get; set; }
    public string locName { get; set; }
}
public class oGet
{
    public Agent oCliente { get; set; }
    public Agent oCliente2 { get; set; }
    public List<Location> oLocations { get; set; }
}

Webservice

Good, now the WebService ActionsDb.asmx / savedata that will be asked to save the data in the DB.

    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string saveData(oGet myObject)
    {
        try
        {
            string sClienteName = myObject.oCliente.bpNombre.ToString();
            return sClienteName.ToString();

        }
        catch (System.Exception ex)
        {
            return ex.Message.ToString();
        }
    }

Result

The error I get follows:

POST http://localhost:8869/Services/WebtoolActionsDb.asmx/saveBLData 500 (Internal Server Error)    
{"Message":"Service call not valid. Parameter missing: \u0027myObject\u0027.","StackTrace":" 
en System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters) 
en System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters) 
en System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
en System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Upvotes: 1

Views: 926

Answers (1)

Matthew Crumley
Matthew Crumley

Reputation: 102715

There are two problems with your JavaScript. The reason you're getting a 500 error is because the JSON you're sending needs to have a "myObject" property to correspond with the parameter to saveData. You also need to change "Agent1" to "oCliente", "Agent2" to "oCliente2", and "Locations" to "oLocations" in order to match the properties in oGet.

myObject.oCliente = oNewObject;
myObject.oCliente2 = oNewObject2;
myObject.oLocations = myLocation;

$.ajax({
    // ...
    data: JSON.stringify({ myObject: myObject }),
    // ...
});

Upvotes: 1

Related Questions