有時候會在前端收集好需要的資訊,在送回後端做資料的處理,這時候就可以用
Json
的格式到後端來做操作。
首先到Github下載.dll來引用
using Newtonsoft.Json;
先在前端收集好資料後,用JSON.stringify()
將物件轉換為Server可以接受的格式String
。
var carObj = {
COLOR: "red",
SPEED: 100
};
$.ajax({
url: "../../../Generic/C_sharp.ashx",
type: "post",
data: {
CAR: JSON.stringify(carObj)
},
success: function () {
},
error: function (e) {
console.log(e)
alert(0);
}
});
建立一個CAR
類別,裡面的欄位記得要設定成public
,並且欄位名稱需和前端的物件命名一致,不然它會找不到對應的名稱,而取不到值。
public class CAR {
public string COLOR;
public int SPEED;
}
使用JsonConvert.DeserializeObject<T>()
,將Json
轉換成物件。
public void ProcessRequest(HttpContext context)
{
string aCarJson = context.Request.Form["CAR"].ToString();
//Json 轉 Obj,並直接丟到類別中。
CAR aCAR = JsonConvert.DeserializeObject<CAR>(aCarJson);
}
此時aCAR
可以取得COLOR
和SPEED
的值了。
不過這只適合只有單一筆的資料處理,如果今天是需要處理多筆數的資料,那就需要稍微做個變化。
前端的物件外層多包一個陣列,若有多筆資料的話,則在.push()
到陣列裡面。
var carObj = {
COLOR: "red",
SPEED: 100
};
var carObj2 = {
COLOR: "blue",
SPEED: 150
};
var arr = [];
arr.push(carObj);
arr.push(carObj2);
$.ajax({
url: "../../../Generic/C_sharp.ashx",
type: "post",
data: {
CAR: JSON.stringify(arr)
},
success: function () {
},
error: function (e) {
console.log(e)
alert(0);
}
});
後端改用List<T>
來接,<T>
裡面的T為className
,這時候一樣反序列化,即可上桌食用。
public void ProcessRequest(HttpContext context)
{
string aCarJson = context.Request.Form["CAR"].ToString();
//Json 轉 Obj,並直接丟到類別中。
//CAR aCAR = JsonConvert.DeserializeObject<CAR>(aCarJson);
List<CAR> aList = JsonConvert.DeserializeObject<List<CAR>>(aCarJson);
}