对象序列化/反序列化不起作用



我有一个扩展方法,System.Object使用 Json.Net 序列化和反序列化对象。 这是我的扩展方法:

public static void SaveToFile(this object data, string FileName)
{
    using (StreamWriter writer = new StreamWriter(FileName))
    {
        string encode = WpfApplication.Helper.Encrypt(JsonConvert.SerializeObject(data));
        writer.Write(encode);
        writer.Close();
    }
}
public static void LoadFromFile<t>(this object data, string FileName)
{
    using (StreamReader reader = new StreamReader(FileName))
    {
        data = JsonConvert.DeserializeObject<t>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));
        reader.Close();
    }
}

这是我要反序列化的类:

public class CardPack
{
    #region Properties
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private List<FlashCard> cards;
    public List<FlashCard> Cards
    {
        get { return cards; }
        set { cards = value; }
    }
    private bool registered;
    public bool Registered
    {
        get { return registered; }
        set { registered = value; }
    }
    private int currentCardIndex;
    public int CurrentCardIndex
    {
        get { return currentCardIndex; }
        set { currentCardIndex = value; }
    }
    public string RegisterKey { get; set; }
    public string ViewName { get; set; }
    public List<FlashCard> TodayCards { get; set; }
    #endregion
    ~CardPack()
    {
        foreach (FlashCard card in cards)
        {
            card.Check();
        }
        currentCardIndex = 0;
        TodayCards = null;
        this.SaveToFile(string.Format(System.IO.Path.GetDirectoryName(
  System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Split(@"file:\")[1] + @"Packs{0}.json", name));
    }

但是每当我反序列化类时cards都是空的,我不知道如何解决问题。有人可以帮助我吗?

更新当我有这段代码时,我发现了错误:

public CardPack(string Name)
    {
        this.name = Name;
        this.LoadFromFile<CardPack>(string.Format(System.IO.Path.GetDirectoryName(
  System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Split(@"file:\")[1] + @"Packs{0}.json", name));
        foreach (var item in cards)
        {
            if (item.NextTime == null)
            {
                int a = 0;
            }
        }
        TodayCards = cards.Where(c => c.NextTime.Date == DateTime.Today).ToList();
    }

因为应用程序在尝试运行foreach (var item in cards)时关闭了!我在这里问了一下,发现cards是空的!

update2 我用稍微不同的结构序列化了CardPack对象。 在以前的结构中Cards属性是只读的。

我发现扩展方法中的data = JsonConvert.DeserializeObject<t>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));不会更改为"data"类,那么CardPack中的Cards总是为空。稍后我会问一个问题来找出为什么我不能从它的扩展方法设置类。

相关内容

  • 没有找到相关文章

最新更新