我从 HTTP 流中获取一个 json 对象。JObject
我使用以下内容创建一个:
var stream = await client.GetStreamAsync(uri);
var root = JToken.Load(new JsonTextReader(new StreamReader(stream)));
这给了我正确的回应。但现在,我想删除其results
属性的最后一个元素,即数组 ( JArray
)。我使用这段代码:
var results = (JArray)root["results"];
var last = results.Last(); // gets the last element -- correct
var removed = results.Remove(last); // removed = false and last not removed
var another = last.Remove(); // doesn't work either
我能够使用以下方法从对象本身中删除一个secret
属性:root
var removed = ((JObject)root).Remove("secret"); // removed = true, works
我也可以向results
数组中添加元素,但由于某种原因,我无法删除它们。我错过了什么?
编辑:在我的头撞到墙上几个小时并写了这篇文章之后,我发现了发生了什么。上面的代码是我实际代码的简化版本。实际上,答案就是这种简化。原始代码稍微缩写了一点:
var last = root["results"].ToObject<JArray>().Last();
last.Remove(); // did not work
关键是我被误叫了ToObject<JArray>()
。这remove()
很可能破坏了逻辑,因为新对象与原始对象不同JArray
。因此,发布的代码按预期工作,我更新了我的代码也更简单。对不起这里的噪音。橡皮鸭问题解决的完美例证