שליחה של Complex Type ו - Array ל - Web Service בפורמט JSON
בפוסט הנוכחי אני אדגים איך פונים ל - WebService שמצפה לקבל טיפוס שהוא לא מה - Primitive Types.
נניח שיש WebService שנראה כך: (לא לשכוח להוריד את ההערה מ - ScriptService - אחרת אי אפשר להפעיל מ - JS)
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class WebService1 : WebService
{
[WebMethod]
public void SetPerson(Person person)
{
// Do Logic.....
}
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string[] Childern { get; set; }
}
function GetSynchronousJSONResponse(url, postData) {
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", url, false);
xmlhttp.setRequestHeader("Content-Type",
"application/json; charset=utf-8");
xmlhttp.send(postData);
var responseText = xmlhttp.responseText;
return responseText;
}
כעת מה שנשאר לנו לעשות זה את הדבר הבא:
למעשה ה - postData צריך להיראות כך:
var jsonPostData = '{person: {Id: 10, Name: "noam", Childern: ["kivi", "banana", "orange"]}}';
בבנייה דינמית נעשה את זה כך:
function SetPerson() {
var id = 10;
var name = 'noam';
var childern = new Array();
childern[0] = 'kivi';
childern[1] = 'banana';
childern[2] = 'orange';
var jsonPostData = '{person: ' +
'{Id: ' + id +
', Name: "' + name +
'", Childern : ["' + childern[0] +
'","' + childern[1] +
'","' + childern[2] +
'"]}}';
GetSynchronousJSONResponse("http://localhost:49395/WebService1.asmx/SetPerson",
jsonPostData);
}
וזהו, נוכל להגיע לשרת עם האובייקט שלנו שנשלח מ - JS