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

时间:2012-09-27 04:52:52

标签: c# c#-4.0 serialization json.net deserialization

我有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)时关闭了! 我问here并发现cards是空的!

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

1 个答案:

答案 0 :(得分:0)

我发现扩展方法中的data = JsonConvert.DeserializeObject<t>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));不会更改为“数据”类,Cards中的CardPack始终为空。我会问一个问题,找出为什么我不能在以后的扩展方法中设置类。