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)
第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)