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
。そのため、投稿されたコードは期待どおりに機能し、コードもよりシンプルになるように更新しました。こちらこそお騒がせしてすみません。ラバーダック問題解決の完璧なイラスト