[ASP.NET] 在 Server 接收 Client 回傳的 JSON 格式資料

摘要:[ASP.NET] 在 Server 接收 Client 回傳的 JSON 格式資料

前言


  在之前有介紹過如何使用 C# 用泛型處理常式來傳送 JSON 格式資料到 Clinet 端顯示,但是沒提到 Server 接收 Client 的 JSON 方法,首先來複習一下之前的使用方法

    // 序列化Object
    public void objectSerialization(HttpContext context)
    {
        ProductData product = new ProductData() { productNo = "201209150001", productName = "搞怪多多", productAmt = "399" };
        DataContractJsonSerializer json = new DataContractJsonSerializer(product.GetType());
        json.WriteObject(context.Response.OutputStream, product);
    }

    public class ProductData
    {
        public string productNo { get; set; }
        public string productName { get; set; }
        public string productAmt { get; set; }
    }

 

  透過 DataContractJsonSerializer 類別,我們可以序列化及反序列化類別,使用 new DataContractJsonSerializer(product.GetType()) 取得將要序列化的物件型別,再使用 json.WriteObject(context.Response.OutputStream, product) 將要指定序列化的物件出入資料流即可,上面的方式即為 Server 傳送 JSON 格式資料到 Clinet  的方式,接下來說明一下 Server 接收 Clinet JSON 格式資料的方式,請參考以下範例。

 

範例


    public void jsonFormatObject(HttpContext context)
    {
        string jData = context.Request.Params["jData"] as string;
        if (jData != null)
        {
            ProductData product = jsonDeserialization(jData);
        }
    }

    // 反序列化JSON
    public static T jsonDeserialization<T>(string jsonString)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonString));
        T obj = (T)ser.ReadObject(ms);
        return obj;
    }

    public class ProductData
    {
        public string productNo { get; set; }
        public string productName { get; set; }
        public string productAmt { get; set; }
    }

  在這裡使用了 泛型方法 jsonDeserialization(string) 來反序列化 JSON 字串,一樣是先取得對應的型別 new DataContractJsonSerializer(typeof(T)) ,之後使用 ReadObject(Stream) 方法將傳入的資料流反序列化物件,所以對於處理JSON字串的應用,可以簡單使用 DataContractJsonSerializer 類別即可以完成。

 

參考資料


DataContractJsonSerializer 類別

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)