国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Json操作庫DynamicJson使用指南

2019-10-29 21:22:00
字體:
來源:轉載
供稿:網友

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吧。

 

 

注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彰武县| 阳西县| 蒲城县| 江津市| 云林县| 镇沅| 桃园县| 蓬莱市| 普定县| 双柏县| 新野县| 沈丘县| 东乌珠穆沁旗| 辽中县| 岳池县| 怀远县| 梅州市| 盖州市| 郎溪县| 扎囊县| 高清| 北票市| 高平市| 屏南县| 余江县| 五华县| 南城县| 江津市| 尤溪县| 盐津县| 阿坝县| 哈尔滨市| 亳州市| 广灵县| 平利县| 顺昌县| 化州市| 东兴市| 通河县| 瓦房店市| 瓦房店市|