1 static void Main(string[] args)
2 {
3 var jsonStr = "json字符串";
4 var jo = JObject.Parse(jsonStr);
5 //var target = KeySort(jo);//排序
6 var s = string.Join("", GetValue(jo));
7 Console.WriteLine(s);
8 Console.Read();
9 }
10
11 /// <summary>
12 /// json 排序并取值
13 /// </summary>
14 /// <param name="jo">JObject</param>
15 /// <returns></returns>
16 static List<string> GetValue(object jo)
17 {
18 var res = new List<string>();
19 var sd = new SortedDictionary<string, object>();
20 switch (jo.GetType().Name)
21 {
22 case "JValue":
23 res.Add(string.Format("{0}", (jo as JValue).Value));
24 break;
25 case "JObject":
26 foreach (var x in jo as JObject)
27 {
28 sd.Add(x.Key, x.Value);
29 }
30 foreach (var x in sd)
31 {
32 res.Add(x.Key);//只取排序后的值需注释掉
33 res.AddRange(GetValue(x.Value));
34 }
35 break;
36 case "JArray":
37 foreach (var x in jo as JArray)
38 {
39 res.AddRange(GetValue(x));
40 }
41 break;
42 }
43 return res;
44 }
45
46 /// <summary>
47 /// json 排序
48 /// </summary>
49 /// <param name="jo">JObject</param>
50 /// <returns></returns>
51 static SortedDictionary<string, object> KeySort(JObject obj)
52 {
53 var res = new SortedDictionary<string, object>();
54 foreach (var x in obj)
55 {
56 if (x.Value is JValue) res.Add(x.Key, x.Value);
57 else if (x.Value is JObject) res.Add(x.Key, KeySort((JObject)x.Value));
58 else if (x.Value is JArray)
59 {
60 var tmp = new SortedDictionary<string, object>[x.Value.Count()];
61 for (var i = 0; i < x.Value.Count(); i++)
62 {
63 tmp[i] = KeySort((JObject)x.Value[i]);
64 }
65 res.Add(x.Key, tmp);
66 }
67 }
68 return res;
69 }