2012-07-06 189 views
0

我有一個IList類,但是當我嘗試將它們存儲在IsolatedStorage中時,它只是說內置的seralizer無法處理它,JSON.net也不能。我已經把課程放在下面,任何人都可以想出一種方法來存儲它?在獨立存儲中存儲IList

我得到的錯誤是;

類型'System.Windows.UIElement'不能被序列化。考慮使用DataContractAttribute屬性標記 ,並用DataMemberAttribute屬性標記要序列化的所有 成員。

IList<ScoreWatcher> RecentSessions = new List<ScoreWatcher>(); 
public class ScoreWatcher 
{ 
    public ScoreWatcher() { } 

    public string SessionName = ""; 
    public DateTime SessionCreationTime; 
    public DateTime SessionModificationTime; 

    public int Player1Total = 0; 
    public int Player1ScoreRollover = 0; 
    public int Player2Total = 0; 
    public int Player2ScoreRollover = 0; 

    public string Player1Name = ""; 
    public string Player2Name = ""; 

    public ListBox scoreListBox; 

    public string GrabFriendlyGLobal() 
    { 
     UpdateModificationTime(); 
     return string.Format("{0}-{1}", Player1Total, Player2Total); 
    } 

    public void UpdateModificationTime() 
    { 
     SessionModificationTime = DateTime.Now; 
    } 

    public void UpdateScoringSystem() 
    { 
     UpdateModificationTime(); 

     Player1Total = 0; 
     Player1ScoreRollover = 0; 
     Player2Total = 0; 
     Player2ScoreRollover = 0; 


     foreach (Match snookerMatch in matches) 
     { 
      if (snookerMatch.Player1Score > snookerMatch.Player2Score) 
       Player1Total++; 
      else if (snookerMatch.Player1Score == snookerMatch.Player2Score) 
      { 
       Player1Total++; 
       Player2Total++; 
      } 
      else 
       Player2Total++; 

      // House cleaning 
      Player1ScoreRollover += snookerMatch.Player1Score; 
      Player2ScoreRollover += snookerMatch.Player2Score; 
     } 

    } 
    public void LoadMatchesIntoListbox() 
    { 
     UpdateModificationTime(); 

     scoreListBox.Items.Clear(); 

     foreach (Match snookerMatch in matches) 
      scoreListBox.Items.Add(new UserControls.GameHistoryTile(snookerMatch.GlobalScore, snookerMatch.Player1Score, snookerMatch.Player2Score)); 
    } 

    public List<Match> matches = new List<Match>(); 
    public class Match 
    { 
     public int Player1Score = 0; 
     public int Player2Score = 0; 

     public string GlobalScore = "0-0"; 
    } 
} 
+0

你需要一個具體的類 - 你不能序列化的界面,據我所知 – Charleh 2012-07-06 18:40:54

+0

在具體的類研究後,它看起來像什麼,我貼的? – Purify 2012-07-06 18:43:36

+0

沒有接口是實現的契約 - 它定義的行爲不是狀態 - 具體的類是提供實現的類。任何接口都不是可序列化的(儘管我假設你正在序列化整個列表......不僅僅是一個項目,因爲ScoreWatcher是具體的--IList 不是) – Charleh 2012-07-06 18:47:57

回答

1

您可以只序列具體的類

理想情況下,你需要改變你的實施提供了串行具體類型 - 你需要這是一個IList?

編輯:啊我看你沒有序列化一個接口,然後 - 基本上你有一個UIElement的參考你的類。你需要指定這個被XmlSerializer忽略 - 這些事件處理程序是由表單處理的嗎?

編輯2:僅供參考,如果你想這樣做,你可以使用XmlIgnore屬性或非序列化取決於如果您使用的BinaryFormatter或XmlSerializer的做系列化

例如

[XmlIgnore] 
public int SomeProperty { get; set; } 
+0

我可以使用列表。這會更好嗎? – Purify 2012-07-06 18:48:44

+0

是的,這將工作 – Charleh 2012-07-06 18:48:51

+0

只是改變它,以便它使用列表。我仍然得到同樣的錯誤。我更新了錯誤的第一篇文章。 – Purify 2012-07-06 18:51:27