當年本身是新手時,用C#寫程序,在C#中解析Json着實頭疼了一把。同事在用一個叫Newtonsoft.json的dll,使用方法不是很舒服,每次都得調.net版本;讓人煩不勝煩。說真的,我倒如今還沒弄熟Newtonsoft.json的用法,類是繼承的,這玩意就很難調。咱們用的json作協議,每一個格式又不徹底同樣。。。
咱們日常都是小軟件一我的能完成的,急須要一個小巧又溫馨的庫,知足需求便可。索性本身寫了一個,千行之內;不須要dll,不須要第三方組件,隨時改.net版本,不須要調dll版本;能快速生成和解析本身須要的數據。源碼開放,代碼量少,隨時可修改。
下載地址:
GitHub:https://github.com/NingShenTian/CsharpJson
碼雲:https://git.oschina.net/xiaoguozhier/CsharpJsongit
生成Josn:github
using CsharpJson; namespace test { class MainClass { public static void Main(string[] args) { //Json對象 JsonObject child = new JsonObject(); //下標形式添加鍵值對 child["china"] = "hello"; child["shanghai"] = 123; //調用Add方法添加鍵值對 child.Add("one", "abc"); child.Add("two", 12); child.Add("three", 44.9); //Json數組 JsonArray arr = new JsonArray(); arr[0] = true; arr[1] = 100; arr[2] = "你好"; arr.Add("12"); arr.Add(456); arr.Add(false); arr.Add(child); JsonObject obj = new JsonObject(); obj.Add("中國", "china"); obj.Add("北京", true); obj.Add("上海", 123); obj.Add("NULL",null); //添加對象 obj.Add("childobj", child); //添加數組 obj.Add("arrayvalue", arr); //定義Json文檔解析類 JsonDocument doc=new JsonDocument(); //給文檔解析類obj對象 doc.Object=obj; //生成 string val = doc.ToJson(); Console.WriteLine("生成的Json字符串:"); Console.WriteLine(val); } } }
解析Json:json
string data = "{\"中國\": \"china\",\"北京\": true,\"上海\": 123}"; //定義解析Json文檔解析類 JsonDocument doc = JsonDocument.FromString(data); //判斷是不是object類型 if(doc.IsObject()) { //解析成object JsonObject jsobj = doc.Object; //遍歷鍵值對 foreach(string key in jsobj.Keys) { //判斷類型,而後輸出 switch(jsobj[key].Valuetype) { case JsonType.BOOL: //bool型 Console.WriteLine("key={0},value={1}",key,jsobj[key].ToBool()); break; case JsonType.NUMBER: //數字類型 Console.WriteLine("key={0},value={1}",key,jsobj[key].ToInt()); break; case JsonType.STRING: //字符串 Console.WriteLine("key={0},value={1}",key,jsobj[key].ToString()); break; } } }