前端JS 與 后台C# 之間JSON序列化與反序列化(筆記)


  JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。

   在 前端瀏覽器 和 后端服務器 之間通常會使用 JSON格式的數據 來進行數據交互,而JSON格式的數據在 前端Javascript  和 后端C# 語言中 最終都會以對象的形式來使用,而 JSON格式的數據在http協議中是以JSON字符串的形式進行傳輸 的,所以就涉及到JSON字符串與對象之間的相互轉換問題。

 

    

 

 

首先,我們來看一下一個C#的類變量數據是怎么從后端C#走向前端Javascript的。

 

    

 

源碼如下:

(C#對象  ==>   json字符串)

        /// <summary>
        /// Json字符轉換的配置對象,設置了基本Json配置的信息 /// </summary>
        private static readonly JsonSerializerSettings Settings = 
            new JsonSerializerSettings { //忽略循環引用,如果設置為Error,則遇到循環引用的時候報錯(建議設置為Error,這樣更規范)
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore, //日期格式化,默認的格式也不好看
                DateFormatString = "yyyy-MM-dd HH:mm:ss", //json中屬性開頭字母小寫的駝峰命名
                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }; //根據配置規則得到json轉換類
        private static JsonSerializer scriptSerializer = JsonSerializer.Create(Settings); /// <summary>
        /// 將任意一個對象轉換為json字符串的表示形式 /// </summary>
        /// <param name="obj">要轉換成json字符串的對象</param>
        /// <returns>轉換后的json字符串,失敗則返回null</returns>
        public static string ConvertToJsonStr(object obj) { try { StringWriter stringWriter = new StringWriter(); scriptSerializer.Serialize(stringWriter, obj); return stringWriter.ToString(); } catch { return null; } }

 

(json字符串   ==>   javascript對象)

 

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //結果是 {a: 'Hello', b: 'World'}

 

 

 

 

然后,再反過來看一下一個Javascript的變量數據又是怎么一步步走向C#后端的。

 

    

 

源碼如下:

(json字符串  ==>  c#對象)

 

        /// <summary>
        /// 將json字符串轉換成對象 /// </summary>
        /// <typeparam name="T">要轉換成的類型</typeparam>
        /// <param name="jsonStr">json字符串</param>
        /// <returns>成功轉換返回對象,否則返回null</returns>
        public static T JsonStrToObject<T>(string jsonStr) { try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); return javaScriptSerializer.Deserialize<T>(jsonStr); } catch { return default(T); } }  

 

 

(javascript對象   ==>   json字符串)

 

var json = JSON.stringify({a: 'Hello', b: 'World'}); //結果是 '{"a": "Hello", "b": "World"}'

 

 

 

 

 

補充: 

   在這里之所以不使用.NET自帶的 JavaScriptSerializer 類來進行對象到 JSON 字符串之間的轉換,是因為在解析日期格式的數據時有缺陷,而使用 Newton.json 能彌補這種缺陷。 
   其實,我們使用Jquery進行AJAX編程的時候,Jquery提供的ajax函數已經在內部封裝了由JSON字符串轉換成JavaScript對象的機制,所以很多時候我們並不需要自己動手實現 (json字符串 ==> javascript對象) 轉換。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM