使用JQUERY ajax函数将JSON对象发送到ASP.NET Web服务

uza*_*y95 6 c# jquery json web-services

我想在aspx页面的客户端创建对象.我想为这些javascript类添加函数,以使生活更轻松.

实际上我可以获取并使用从服务返回的对象(从服务器端类派生).当我想通过jquery ajax方法从客户端发送对象时,我无法做到:)

这是我的javascript类:

function ClassAndMark(_mark, _lesson){

    this.Lesson = _lesson;
    this.Mark = _mark;
}


function Student(_name, _surname, _classAndMark){

    this.Name = _name;
    this.SurName = _surname;
    this.ClassAndMark = _classAndMark;
}
Run Code Online (Sandbox Code Playgroud)

这是Student类调用Web Service的方法:

JSClass.prototype.fSaveToDB(){
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/WS/SaveObject.asmx/fSaveToDB"),

        data: ????????????,
 // This might be: JSON.stringify(this) ?
 // Web service method has a parameter, name is _obj 
 // if i don't send data with parameter, i'm getting this error:
 // Invalid web service call, missing value for parameter: '_obj'
 //
 // Should i send it like that:
 // data: "{_obj:" + JSON.stringify(this) + "}"
 // 
 // I tried to wrap this with parameter like that: 
 // data: JSON.stringify("{_obj:" + this + "}") 
 // 
 // But i got this error:
 // Cannot convert object of type 'System.String' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'

        dataType: "json"
    });
}
Run Code Online (Sandbox Code Playgroud)

要创建javascript对象并调用其方法将其发送到Web服务:

实际上我不知道应该在服务器端定义类和方法,但我认为:

class ClassAndMark{

    public string Lesson ;
    public string Mark ;
}


class Student{

    public string Name ;
    public string SurName ;
    public ClassAndMark classAndMark ;
}
Run Code Online (Sandbox Code Playgroud)

网络服务在下面,但我再也无法得到应该是什么而不是???? :

[WebMethod()]
public Student fSaveToDB(???? _obj)
{
    // How can i convert input parameter/parameters 
    // of method in the server side object?   

    // SQL operations  
    // srting QInsert = "INSERT INTO tableName (......) VALUES (.....)";
    // ...
    // ..
    // .

    return new Student{
                     Name = ???, // deserialize _obj and pass its Name value
                     SurName = ???, // deserialize _obj and pass its SurName value
                     classAndMark = ???, // deserialize _obj and pass its classAndMark value
                  };
}
Run Code Online (Sandbox Code Playgroud)

mam*_*moo 5

第1步,客户端:您必须将客户端对象序列化为JSON,我个人使用JSON2库的stringify()方法:http://www.json.org/js.html

data: JSON.stringify(myObj)
Run Code Online (Sandbox Code Playgroud)

第2步,服务器端:您必须将序列化对象转换为c#代码"可食用"的内容.在这里,你可以使用反序列化()微软的JavaScriptSerializer类的方法(但可能需要在.NET 3.5的一些问题,如果你没有安装SP做),或以其他方式JSON.net库http://james.newtonking.com/pages /json-net.aspx

服务器端方法签名应该是:

fSaveToDB(Object myObj)
Run Code Online (Sandbox Code Playgroud)

其中"myObj"是客户端对象容器的名称:

{myObj: your object...}
Run Code Online (Sandbox Code Playgroud)

  • 你是否试过像我在最后一行写的那样包装你的对象?像这样:data:JSON.stringify({paramName:myObj}) (2认同)