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對象) 轉換。