如何在C# Newtonsoft中遍历纯JSON数组?
解决Newtonsoft.Json遍历纯值类型JSON数组的问题
嘿,我懂你的困扰!你拿到的是纯值类型的JSON数组(要么是一串数字,要么是一串字符串),但之前用JObject去遍历肯定会报错——毕竟数组里的元素根本不是键值对形式的JSON对象呀!
先纠正你的错误代码
你原来的代码里foreach(JObject item in array)是问题核心:JObject对应JSON中的对象类型(比如{"key": "value"}),而你的数组里是JValue类型的纯值(整数或字符串),强行转换肯定会出类型不匹配的异常。
两种正确的遍历方案
方案1:直接用JToken遍历(适合不确定数组类型的情况)
如果你不确定JSON数组里是数字还是字符串,可以用JToken来遍历,然后根据元素的类型做相应处理:
// 示例JSON:数字数组或字符串数组 string json = "[ 78293270, 847744, 32816430 ]"; // string json = "[\"aa\", \"bb\", \"cc\"]"; JArray array = JsonConvert.DeserializeObject<JArray>(json); foreach (JToken item in array) { // 判断元素的JSON类型 switch (item.Type) { case JTokenType.Integer: int number = item.Value<int>(); Console.WriteLine($"处理数字:{number}"); break; case JTokenType.String: string text = item.Value<string>(); Console.WriteLine($"处理字符串:{text}"); break; // 还可以扩展其他类型,比如布尔、浮点数等 } }
方案2:直接反序列化为.NET原生数组(适合已知类型的情况)
如果提前知道JSON数组的类型,直接转成对应的.NET数组是最简洁的,完全不用和JToken打交道:
// 数字数组的情况 string numJson = "[ 78293270, 847744, 32816430 ]"; int[] numArray = JsonConvert.DeserializeObject<int[]>(numJson); foreach (int num in numArray) { Console.WriteLine(num); } // 字符串数组的情况 string strJson = "[\"aa\", \"bb\", \"cc\"]"; string[] strArray = JsonConvert.DeserializeObject<string[]>(strJson); foreach (string str in strArray) { Console.WriteLine(str); }
额外小提示
如果你的数组可能混合类型(虽然这种情况很少见),也可以用JValue来遍历,JValue是所有纯值类型的基类,用法和JToken类似。
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

