【发布时间】:2017-01-01 09:42:15
【问题描述】:
在 C# 中玩 Stack 集合时,我遇到了以下问题。确切地说,我不确定为什么会这样。请说明原因和解决方案的替代方案。
问题 -
具有 Stack 作为属性的类。例如,将该类命名为 Progress。 T 是类类型 Item。
现在,每当用户取得任何进展时,我们都会将其存储在堆栈中。如果用户在两者之间离开,那么下次我们将从堆栈中窥视该项目,以便从那个阶段开始。下面的代码 sn-p 将给出正在尝试什么的想法......
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