C#でStackコレクションを再生しているときに、次の問題が発生しました。正確に私はなぜそれが起こっているのか分かりません。その理由とソリューションの代替案についていくつか明記してください。JsonConvert.Deserializerインデックスの問題
問題 -
クラスプロパティとしてスタックを持ちます。たとえば、そのクラスの名前をProgressとします。 Tはクラス型のItemです。
ユーザーが進捗するたびにスタックに格納されます。そして、ユーザーがその間を去ると、次回はその段階からスタックからアイテムを覗き見します。コードスニペットの下に試されているかのアイデアを与えるだろう...
using static System.Console;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace StackCollection
{
class Program
{
static void Main(string[] args)
{
Progress progress = new Progress();
progress.Items.Push(new Item { PlanID = null, PlanName = "Plan A" });
var jsonString = JsonConvert.SerializeObject(progress);
var temp = JsonConvert.DeserializeObject<Progress>(jsonString);
temp.Items.Push(new Item { PlanID = null, PlanName = "Plan B" });
jsonString = JsonConvert.SerializeObject(temp);
temp = JsonConvert.DeserializeObject<Progress>(jsonString);
temp.Items.Push(new Item { PlanID = null, PlanName = "Plan C" });
jsonString = JsonConvert.SerializeObject(temp);
temp = JsonConvert.DeserializeObject<Progress>(jsonString);
WriteLine(temp.Items.Peek().PlanName);
ReadLine();
}
}
class Progress
{
public Stack<Item> Items { get; set; }
public Progress()
{
Items = new Stack<Item>();
}
}
class Item
{
public string PlanID { get; set; }
public string PlanName { get; set; }
}
}
今ライン -
WriteLine(temp.Items.Peek().PlanName);
が
プランC
を返すべきであるが、返されます
プランB
インデックスが変更されている理由ので、任意の手掛かりやポインタが参考になります。
JSON文字列が正しい順序を持っていますが、最後の文字列の後にあります。 temp = JsonConvert.DeserializeObject