我們都知道在互聯網發展的初期時代,那時候采用的還是C/S架構的程序。
那麽軟件和軟件傳遞的數據格式也從普通的文本轉換到了XML這種格式化的存儲格式文本。
那麽在互聯網移動互聯網時代,這種C/S傳遞XML這種格式文件顯然是不行的。
那麽今天就來搞搞JSON。
我們來看看百度百科的解釋:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、javascript、Perl、python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網絡傳輸速率)。
百度百科鏈接:http://baike.baidu.com/link?url=iu5RKjFjmnM5DtVOSTzMl8MsTxdhPCCkKWOyMnsI4zP9DPSC_Bxf-J8ZvgTymL0lfaao21iY9z_40TalfJHhLK
那麽顯然這種語言格式非常適合傳遞和解析,並且支持多種語言。
一個簡單的JSON數據格式: 他包含了 一個KEY 和值 。寫法是: {“KEY”:”VALUE”}
那麽JSON 如果不支持負責的數據格式,那樣顯然是無法替代XML來作為傳遞的。
數組: [value,value]
復雜的集合:list ,map 等
更加復雜的結合體:
再復雜一點:
顯然,看到這裏 ,JSON的傳遞顯然會符合你的要求:
我們再來看下標準的寫法:一個標準的Map<List<Object>> 寫法。 非常清晰
{ "people":[ {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}, {"firstName":"Jason","lastName":"Hunter","email":"bbbb"}, {"firstName":"Elliotte","lastName":"Harold","email":"cccc"} ]
一個復雜的Object 類:
{ "programmers": [{ "firstName": "Brett", "lastName": "McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName": "Hunter", "email": "bbbb" }, { "firstName": "Elliotte", "lastName": "Harold", "email": "cccc" }], "authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "sciencefiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christianfiction" }], "musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }] }
說了這麽多,開始正題,用C# 去操作JSON 然後進行傳遞數據,那麽今天的教程只會寫到如何生成和解析JSON 數據
在C#中操作JSON 數據的類庫有很多,這裏我們用到Newtonsoft.Json.dll 這個動態庫。
那麽引入進去之後我們就要開始幹活了,在Java 中常常喜歡講操作以Utils 定義,而C#喜歡用Helper 來定義。那還是遵循C#的歸還,我們來定義一個
JsonHelper.cs
using Newtonsoft.Json; using Newtonsoft.Json.Converters; using system.IO; namespace Helper { public class JsonHelper { /// <summary> /// 將對象序列化為JSON格式 /// </summary> /// <param name="o">對象</param> /// <returns>json字符串</returns> public static string SerializeObject(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// <summary> /// 解析JSON字符串生成對象實體 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子兒"})</param> /// <returns>對象實體</returns> public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = o as T; return t; } /// <summary> /// 解析JSON數組生成對象實體集合 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="json">json數組字符串(eg.[{"ID":"112","Name":"石子兒"}])</param> /// <returns>對象實體集合</returns> public static List<T> DeserializeJsonToList<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>)); List<T> list = o as List<T>; return list; } /// <summary> /// 反序列化JSON到給定的匿名對象. /// </summary> /// <typeparam name="T">匿名對象類型</typeparam> /// <param name="json">json字符串</param> /// <param name="anonymousTypeObject">匿名對象</param> /// <returns>匿名對象</returns> public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject) { T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); return t; } } }
文中大多數是用實體轉換過來的。那麽我們在操作JSON 的時候最歸還的做法是定義一個類,然後將該類實例化,最後進行轉換。
如一個學生類:
namespace bean { public class bean { /// <summary> /// 該操作ID 方便操作 /// </summary> private String id; public String Id { get { return id; } set { id = value; } } /// <summary> /// name /// </summary> private String name; public String Name { get { return name; } set { name= value; } } <span class="crayon-c">/// <summary></span><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-2"><span class="crayon-h"> </span><span class="crayon-c">/// age</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-3"><span class="crayon-h"> </span><span class="crayon-c">/// </summary></span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-4"><span class="crayon-h"> </span><span class="crayon-m">private</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-5"> </div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-6"><span class="crayon-h"> </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">age</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-7"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-8"><span class="crayon-h"> </span><span class="crayon-st">get</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-9"><span class="crayon-h"> </span><span class="crayon-st">set</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">value</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div> <table class="crayon-table "><tbody><tr class="crayon-row"><td class="crayon-nums " data-settings="hide"> </td></tr></tbody></table>}
然後我們將類實例化:
1 2 3 4 Bean bean = new Bean(); bean.Id = "1234"; bean.name = "test"; bean.age = 12;這步搞定之後,我們就需要生成JSON 數據了:
1 String json = JsonHelper.SerializeObject(bean);OK,那麽這樣就生成成功了,我們來看看
1 {"id":"1234","name":"test","age":12}顯然這樣是非常直觀的,那麽我們再將反轉成對象。
1 Bean bean = (Bean)JsonHelper.DeserializeJsonToObject({"id":"1234","name":"test","age":12});非常簡單對不對。ok 這裏我們就完成了JSON 的簡單操作。更加復雜的LIST 和Map 這些可以參照API 自行解決。
Tags: 百度百科 移動互聯網 Object people C語言
文章來源: