C# json 嵌套 排序 生成签名
- json排序并取值
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构