Json操作库DynamicJson使用指南

2019-12-30 13:49:17于海丽

遍历


// 直接遍历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);
  

其他(冲突问题,编译不通过问题)