现有的轮子觉得不好用,又造一个,欢迎来测试提bug!
经常拿 JSON 当协议用,结果发现好多解析库,每次解析都要先定义类,想找个通用的都不是很满意。拿 JSON 当协议,会定义几种格式,这样的话要解析就得每种都定义个类,然后又没法判断哪种格式对应那个类,总之感觉难用,所以就动手写了一个。
生成 JSON:
using CsharpJson; namespace test { class MainClass { public static void Main(string[] args) { JsonObject child = new JsonObject(); child["china"] = "hello"; child["shanghai"] = 123; child.Add("one", "abc"); child.Add("two", 12); child.Add("three", 44.9); 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); JsonDocument doc=new JsonDocument(); doc.Object=obj; string val = doc.ToJson(); Console.WriteLine("生成的Json字符串:"); Console.WriteLine(val); } } }
解析 JSON:
string data = "{\"中国\": \"china\",\"北京\": true,\"上海\": 123}"; doc = JsonDocument.FromString(data); if(doc.IsObject()) { JsonObject jsobj = doc.Object; foreach(string key in jsobj.Keys) { switch(jsobj[key].Valuetype) { case JsonType.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; } } }