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

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

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

 

    

 

 

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

 

    

 

源碼以下:java

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

        /// <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#

(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對象) 轉換。 
相關文章
相關標籤/搜索