如何从JSON对象数组中移除指定属性?代码不生效问题排查
问题原因与修正方案
你的代码没生效是因为错误地操作了JArray而非单个JObject:你调用jArray.Remove(jArray[indexNum][jProperty.Name])是尝试从数组里移除某个属性的JToken,但"name"属性是属于每个数组元素(JObject)的,不是数组的直接子元素,所以这个操作根本没触碰到目标属性。
另外循环里的indexNum逻辑完全多余,还会导致逻辑混乱。
修正后的代码
void Start() { var foodlist = new List<Food>() { new() { name = "Banana", price = 3000 }, new() { name = "Apple", price = 1000} }; string jasonString = JsonConvert.SerializeObject(foodlist); JArray jArray = JArray.Parse(jasonString); // 直接遍历每个JObject,移除指定属性 foreach (var jObject in jArray.Children<JObject>()) { jObject.Remove("name"); // 关键:从当前JObject移除"name"属性 } // 验证结果 string jarrayString = JsonConvert.SerializeObject(jArray); print(jarrayString); } public class Food { public string name; public int price; }
更简洁的写法(可选)
如果不需要中间的JArray操作,甚至可以在序列化前直接处理原集合,或者用匿名类序列化:
// 直接生成不含name的匿名类集合再序列化 string result = JsonConvert.SerializeObject( foodlist.Select(f => new { f.price }) ); print(result);
这样输出就会是你期望的[{"price":3000},{"price":1000}]。
内容的提问来源于stack exchange,提问作者Shrimp Korokke
相关产品推荐
相关产品推荐

