2012-09-27 42 views
0

我有一个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属性是只读的。

回答

0

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