有时候会在前端收集好需要的资讯,在送回后端做资料的处理,这时候就可以用
Json
的格式到后端来做操作。
JSON.NET
首先到Github下载.dll来引用
using Newtonsoft.Json;
单笔Json To Object
JavaScript
先在前端收集好资料后,用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); } });
CS
建立一个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
的值了。
不过这只适合只有单一笔的资料处理,如果今天是需要处理多笔数的资料,那就需要稍微做个变化。
JavaScript
前端的物件外层多包一个阵列,若有多笔资料的话,则在.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); } });
CS
后端改用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); }