亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

Json操作庫DynamicJson使用指南

2020-01-24 00:59:55
字體:
來源:轉載
供稿:網友

Json的簡介

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基于ECMAScript的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成(一般用于提升網絡傳輸速率)。

Json的優點

  1. 數據格式比較簡單,易于讀寫,格式都是壓縮的,占用帶寬小
  2. 易于解析,客戶端JavaScript可以簡單的通過eval()進行JSON數據的讀取;
  3. 支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便于服務器端的解析;
  4. 在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏于PHP序列化后的程序直接調用,PHP服務器端的對象、數組等能直接生成JSON格式,便于客戶端的訪問提??;
  5. 因為JSON格式能直接為服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,并且易于維護。

傳統操作Json

很多.NET開發程序員或多或少都會遇到操作Json字符串的情況,一般來說,我們都是先定義一個和Json格式相匹配的類,然后將json字符串反序列化成對象,這樣便于我們編程使用,由于.NET是強類型語言,Json又是多變的,非常靈活的,導致服務器端定義的json序列化類越來越多,操作也及其不便。特別是對多層嵌套的json更是頭疼。此次不再過多聲明,.NET程序員用過都明白。

簡易操作Json

DynamicJson是專門為.NET程序員開發的Json操作庫,其源碼非常簡單,僅僅只有400行代碼,一個對應的class類,目前只支持.NET 4.0以上的.NET Framework。

如何在項目中使用DynamicJson

直接通過Nuget安裝

PM > Install-Package DynamicJson

下載DynamicJson.dll,然后在項目中添加引用,下載地址如下:

http://dynamicjson.codeplex.com/

讀取、獲取

// 將Json字符串解析成DynamicJson對象var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }"); var r1 = json.foo; // "json" - string類型var r2 = json.bar; // 100 - double類型var r3 = json.nest.foobar; // true - bool類型var r4 = json["nest"]["foobar"]; // 還可以和javascript一樣通過索引器獲取

判斷,新增,更新,刪除,替換,還可以輸出新的Json字符串

// 將Json字符串解析成DynamicJson對象      var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");       // 判斷json字符串中是否包含指定鍵      var b1_1 = json.IsDefined("foo"); // true      var b2_1 = json.IsDefined("foooo"); // false      // 上面的判斷還可以更簡單,直接通過json.鍵()就可以判斷      var b1_2 = json.foo(); // true      var b2_2 = json.foooo(); // false;        // 新增操作      json.Arr = new string[] { "NOR", "XOR" }; // 新增一個js數組      json.Obj1 = new { }; // 新增一個js對象      json.Obj2 = new { foo = "abc", bar = 100 }; // 初始化一個匿名對象并添加到json字符串中       // 刪除操作      json.Delete("foo");      json.Arr.Delete(0);      // 還可以更簡單去刪除,直接通過json(鍵); 即可刪除。      json("bar");      json.Arr(1);       // 替換操作      json.Obj1 = 5000;       // 創建一個新的JsonObject      dynamic newjson = new DynamicJson();      newjson.str = "aaa";      newjson.obj = new { foo = "bar" };       // 直接序列化輸出json字符串      var jsonstring = newjson.ToString(); // {"str":"aaa","obj":{"foo":"bar"}}

遍歷

// 直接遍歷json數組      var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");      foreach (int item in arrayJson)      {        Console.WriteLine(item); // 1, 10, 200, 300      }       // 直接遍歷json對象      var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");      foreach (KeyValuePair<string, dynamic> item in objectJson)      {        Console.WriteLine(item.Key + ":" + item.Value); // foo:json, bar:100      }

轉換和反序列化

public class FooBar    {      public string foo { get; set; }      public int bar { get; set; }    } var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");      var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");       // 將json數組轉成C#數組      // 方法一:      var array1 = arrayJson.Deserialize<int[]>();      // 方法二      var array2 = (int[])arrayJson;      // 方法三,這種最簡單,直接聲明接收即可,推薦使用      int[] array3 = arrayJson;       // 將json字符串映射成C#對象      // 方法一:      var foobar1 = objectJson.Deserialize<FooBar>();      // 方法二:       var foobar2 = (FooBar)objectJson;      // 方法三,這種最簡單,直接聲明接收即可,推薦使用      FooBar foobar3 = objectJson;       // 還可以通過Linq進行操作      var objectJsonList = DynamicJson.Parse(@"[{""bar"":50},{""bar"":100}]");      var barSum = ((FooBar[])objectJsonList).Select(fb => fb.bar).Sum(); // 150      var dynamicWithLinq = ((dynamic[])objectJsonList).Select(d => d.bar);

序列化成json字符串

// 聲明一個匿名對象      var obj = new      {        Name = "Foo",        Age = 30,        Address = new        {          Country = "Japan",          City = "Tokyo"        },        Like = new[] { "Microsoft", "Xbox" }      };      // 序列化      // {"Name":"Foo","Age":30,"Address":{"Country":"Japan","City":"Tokyo"},"Like":["Microsoft","Xbox"]}      var jsonStringFromObj = DynamicJson.Serialize(obj);       // 還支持直接序列化數組,集合      // [{"foo":"fooooo!","bar":1000},{"foo":"orz","bar":10}]      var foobar = new FooBar[] {        new FooBar { foo = "fooooo!", bar = 1000 },        new FooBar { foo = "orz", bar = 10 }      };      // 序列化      var jsonFoobar = DynamicJson.Serialize(foobar);  

其他(沖突問題,編譯不通過問題)

var nestJson = DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");       nestJson.nest(); // 判斷是否存在nest屬性      nestJson.nest("a"); // 刪除nest屬性中的a屬性       // 處理json中的鍵和C#的類型沖突導致編譯失敗,或語法提示錯誤,只需要在前面加@前綴即可      var json = DynamicJson.Parse(@"{""int"":10,""event"":null}");      var r1 = json.@int; // 10.0      var r2 = json.@event; // null

例子一:TwitterAPI

static void Main(){  var publicTL = new WebClient().DownloadString(@"http://twitter.com/statuses/public_timeline.json");  var statuses = DynamicJson.Parse(publicTL);  foreach (var status in statuses)  {    Console.WriteLine(status.user.screen_name);    Console.WriteLine(status.text);  }}  

例子二:TwitterAPI2

static void Main(string[] args){  var wc = new WebClient();  var statuses = Enumerable.Range(1, 5)    .Select(i =>      wc.DownloadString("http://twitter.com/statuses/user_timeline/neuecc.json?page=" + i))    .SelectMany(s => (dynamic[])DynamicJson.Parse(s))    .OrderBy(j => j.id);   foreach (var status in statuses)  {    Console.WriteLine(status.text);  }}   

看到這里,是不是覺得很爽,趕快讓你的項目集成DynamicJson吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频在线观看视频| 国产一区二区日韩精品欧美精品| 久久精品久久久久电影| 日韩在线精品一区| 久久久免费观看视频| 久久久久久久久国产精品| 日韩午夜在线视频| 国产精品爽爽爽爽爽爽在线观看| 一区二区三区四区精品| 日韩欧美一区二区在线| 国产精品电影一区| 亚洲精品一区在线观看香蕉| 中文字幕日韩av电影| 九九九久久国产免费| 在线观看亚洲视频| 欧美风情在线观看| 国产精品va在线| 136fldh精品导航福利| 色无极影院亚洲| 影音先锋欧美在线资源| 成人美女免费网站视频| 欧美激情三级免费| 欧美日韩日本国产| 国产一区二区在线播放| 欧美视频精品一区| 九九精品视频在线观看| 日韩中文视频免费在线观看| 欧美激情videos| 91久久精品美女| 91丝袜美腿美女视频网站| 亚洲国产欧美久久| 日韩精品高清在线观看| 免费不卡欧美自拍视频| 97涩涩爰在线观看亚洲| 国产精品中文字幕在线观看| 国产成人精品久久| 日韩色av导航| 亚洲黄色av女优在线观看| 欧美激情国产日韩精品一区18| 97免费中文视频在线观看| 久久影院中文字幕| 亚州精品天堂中文字幕| 中文字幕视频一区二区在线有码| 97在线看福利| 国产亚洲人成网站在线观看| 亚洲在线第一页| 91久久久国产精品| 亚洲精品国产精品自产a区红杏吧| 欧美激情一区二区三区久久久| 欧美成年人视频网站| 欧美在线视频网| 欧美亚洲在线视频| 久久艹在线视频| 亚洲精品一区二区三区婷婷月| 亚洲最大的免费| 8090成年在线看片午夜| 亚洲天堂成人在线| 亚洲在线免费看| 久久精品国产91精品亚洲| 亚洲v日韩v综合v精品v| 中文字幕亚洲无线码在线一区| 青草青草久热精品视频在线网站| 青青久久aⅴ北条麻妃| 亚洲国产成人91精品| 最近2019中文字幕大全第二页| 国产成人精品在线观看| 亚洲一区二区三区香蕉| 日韩在线观看免费高清完整版| 国产视频精品免费播放| 欧洲成人免费aa| 亚洲国产精彩中文乱码av| 伊人伊成久久人综合网站| 欧美一区三区三区高中清蜜桃| 欧美国产在线视频| 日韩欧美在线视频观看| 日韩视频免费在线观看| 亚洲精品一区二区三区婷婷月| 久久久久亚洲精品| 国产精品美乳一区二区免费| 亚洲欧美国产精品专区久久| 91av在线免费观看| 欧美激情精品久久久久久变态| 亚洲精品国精品久久99热一| 日韩免费看的电影电视剧大全| 国产精品久久中文| 欧美另类老女人| 日韩人体视频一二区| 国产视频亚洲视频| 中文欧美在线视频| 亚洲自拍偷拍网址| 欧美巨猛xxxx猛交黑人97人| 国产欧美在线播放| 精品国产乱码久久久久久天美| 亚洲成人动漫在线播放| 福利视频第一区| 亚洲美女免费精品视频在线观看| 久久精品人人做人人爽| 国产美女精品视频免费观看| 午夜剧场成人观在线视频免费观看| 亚洲第一页中文字幕| 亚洲国产精彩中文乱码av| 欧美日韩国产影院| 69av在线视频| zzijzzij亚洲日本成熟少妇| 亚洲国产天堂久久综合网| 国产欧美一区二区三区视频| 国产精品久久久久91| 日韩精品免费观看| 美女黄色丝袜一区| 日韩天堂在线视频| 欧美成人第一页| 亚洲视频在线观看网站| 成人午夜黄色影院| 亚洲人高潮女人毛茸茸| 日本最新高清不卡中文字幕| 国产精品视频色| 日韩视频免费在线观看| 日本sm极度另类视频| 久久久久久国产精品| 日韩av在线天堂网| 中文字幕亚洲情99在线| 亚洲精品电影久久久| 欧美又大粗又爽又黄大片视频| 国产盗摄xxxx视频xxx69| 亚洲黄色av女优在线观看| 日韩av一卡二卡| 亚洲九九九在线观看| 午夜伦理精品一区| 欧美一区二区.| 国产在线播放91| 97在线视频免费| 久久久免费高清电视剧观看| 亚洲精品在线91| 欧美自拍视频在线观看| 欧美夫妻性生活xx| 韩国19禁主播vip福利视频| 亚洲福利视频网| 国产精品久久电影观看| 91情侣偷在线精品国产| 欧美又大又粗又长| 欧美精品九九久久| 91在线视频导航| 精品色蜜蜜精品视频在线观看| 成人激情在线播放| 中文字幕亚洲欧美一区二区三区| 97久久精品国产| 韩国v欧美v日本v亚洲| 欧美精品免费在线观看| 黑人巨大精品欧美一区二区三区| 国产精品嫩草影院久久久| 精品久久久久久亚洲国产300| 97久久精品在线| 国产精品嫩草视频| 国产亚洲精品va在线观看| 亚洲精品国产品国语在线| 欧美www视频在线观看| 中文字幕久热精品在线视频| 欧美人与物videos| 国产精品美女久久久免费| 国产成人精品久久二区二区91| 亚洲第一精品福利| 日本久久久a级免费| 国产成人精品av| 日韩乱码在线视频|