我從HTTP流獲取json對象。我創建一個JObject
使用以下內容:爲什麼我不能從JArray中移除一個元素?
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
我能夠使用從root
對象本身刪除secret
屬性:
var removed = ((JObject)root).Remove("secret"); // removed = true, works
我還可以添加元素的results
陣列,但由於某些原因,我無法刪除它們。 我錯過了什麼?
編輯:在將我的頭靠在牆上幾個小時後寫下這篇文章後,我發現發生了什麼事。以上代碼是我的實際代碼的簡化版本。實際上這就是簡化。原始代碼是有點更簡稱:
var last = root["results"].ToObject<JArray>().Last();
last.Remove(); // did not work
的關鍵是,我被誤叫ToObject<JArray>()
。這很可能是因爲新對象與原始JArray
不一樣而打破了remove()
邏輯。 因此,發佈的代碼按預期工作,我更新了我的代碼也更簡單。對不起,這裏有噪音。 Rubber Duck Problem Solving
您應該在回答中添加更正的行而不是錯誤的行。儘管如此。 – Osama
請在答案中有更新的代碼... – slayernoah
認真@slayernoah?你能否停止追求名譽點並實際閱讀答案? *發佈的代碼按預期工作* –