2012-09-27 5 views
0

J'ai une méthode d'extension pour System.Object pour sérialiser et désérialiser des objets en utilisant Json.Net. ceci est mes méthodes d'extension:La sérialisation/désérialisation d'objet ne fonctionne pas

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(); 
    } 
} 

et Il est la classe que je veux désérialiser:

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)); 
    } 

mais chaque fois que je désérialiser la classe cards est vide et je ne sais pas comment résoudre le problème . Quelqu'un peut-il m'aider?

Mise à jour je trouve l'erreur quand j'avais ce code:

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(); 
    } 

car l'application fermée quand il tente d'exécuter foreach (var item in cards)! J'ai demandé here et j'ai découvert que cards est vide!

update2 J'ai sérialisé l'objet CardPack avec une structure légèrement différente. dans la structure précédente Cards la propriété était en lecture seule.

Répondre

0

Je trouve que data = JsonConvert.DeserializeObject<t>(WpfApplication.Helper.Decrypt(reader.ReadToEnd())); dans la méthode d'extension ne change pas à la classe des « données » puis Cards dans CardPack est toujours nulle. Je vais poser une question pour savoir pourquoi je ne peux pas définir la classe de sa méthode d'extension plus tard.