iT邦幫忙

2

[C#] Json反序列化(Deserialize)為物件(Object)

有時候會在前端收集好需要的資訊,在送回後端做資料的處理,這時候就可以用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可以取得COLORSPEED的值了。


不過這只適合只有單一筆的資料處理,如果今天是需要處理多筆數的資料,那就需要稍微做個變化。

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,這時候一樣反序列化,即可上桌食用。
/images/emoticon/emoticon12.gif

    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);
    }

尚未有邦友留言

立即登入留言