2013-04-24 30 views
0

我有一個問題,同時節約了我的列表項獨立存儲(Windows Phone 7的)保存我的列表,以獨立存儲

這是我如何定義我的列表類。我使用數據綁定

public class CTransaction 
    { 
     public String Date1 { get; set; } 
     public String Amount1 { get; set; } 
     public String Type1 { get; set; } 
     public String Time1 { get; set; } 
     public String Dis1 { get; set; } 
     public String Def1 { get; set; } 
     public CTransaction(String date1, String amount1, String type1, String time1, String dis1, String def1) 
     { 
      this.Date1 = date1; 
      this.Amount1 = amount1; 
      this.Time1 = time1; 
      this.Dis1 = dis1; 
      this.Def1 = def1; 
      switch (type1) 
      { 
       case "FR": 
        this.Type1 = "Images/a.png"; 
        break; 

       case "TA": 
        this.Type1 = "Images/b.png"; 
        break; 

       case "DA": 
        this.Type1 = "Images/c.png"; 
        break; 

       case "CC": 
        this.Type1 = "Images/mount.png"; 
        break; 
      } 
     } 
    } 

這裏是我插入項目到我的清單;我將一些東西分配給字段,然後我將它插入到我的列表中;

List<CTransaction> ctransactionList = new List<CTransaction>(); 
//some list item filling operations here*** 

ctransactionList.Insert(0, new CTransaction(DefaultDate, DefaultAmount, RandomType, Times, Dist, Defin));//This one inserts at the top of my list 

     CTransactionList.ItemsSource = null; 
     CTransactionList.ItemsSource = ctransactionList; //These two operations refreshes my list 

!是的,你看我怎麼插入和創建我的列表。一切都好。現在我要救ctransactionList

這裏是我如何保存它(通過點擊一個按鈕)

var store = IsolatedStorageFile.GetUserStoreForApplication(); 
     if (store.FileExists("saver")) 
     { 
      store.DeleteFile("saver"); 
     } 
     using (var stream = new IsolatedStorageFileStream("saver", FileMode.OpenOrCreate, FileAccess.Write, store)) 
     { 
      var serializer = new XmlSerializer(typeof(List<CTransaction>)); 
      serializer.Serialize(stream, ctransactionList); 
     } 

這裏是如何加載(通過點擊另一個按鈕)

var store = IsolatedStorageFile.GetUserStoreForApplication(); 

     if (store.FileExists("saver")) 
     { 
      using (var stream = new IsolatedStorageFileStream("saver", FileMode.OpenOrCreate, FileAccess.Read, store)) 
      { 
       var reader = new StreamReader(stream); 

       if (!reader.EndOfStream) 
       { 
        var serializer = new XmlSerializer(typeof(List<CTransaction>)); 
        ctransactionList = (List<CTransaction>)serializer.Deserialize(reader); 
       } 
      } 
     } 

在調試時,保存操作看起來是一致的,不會引發任何錯誤,但是在加載時;這是這條線上出現的錯誤;

ctransactionList = (List<CTransaction>)serializer.Deserialize(reader); 

ERROR:有XML文檔中的誤差(3,4)。

如果你能幫助我,我會很感激。 在此先感謝

回答

2

試試這個,讓您的類序列化:

[DataContract] 
    public class CTransaction 
    { 
     [DataMember] 
     public String Date1 { get; set; } 
     [DataMember] 
     public String Amount1 { get; set; } 
     [DataMember] 
     public String Type1 { get; set; } 
     [DataMember] 
     public String Time1 { get; set; } 
     [DataMember] 
     public String Dis1 { get; set; } 
     [DataMember] 
     public String Def1 { get; set; } 
     public CTransaction(String date1, String amount1, String type1, String time1, String dis1, String def1) 
     { 
      //your code 
     } 
    } 

然後更改加載和保存方法:

public List<CTransaction> LoadFromIsolatedStorage() 
{ 
    List<CTransaction> ret = new List<CTransaction>(); 
    try 
    { 
    var store = IsolatedStorageFile.GetUserStoreForApplication(); 
    if (store.FileExists("saver")) 
    { 
     using (var stream = new IsolatedStorageFileStream("saver", FileMode.OpenOrCreate, FileAccess.Read, store)) 
     { 
     if (stream.Length > 0) 
     { 
      DataContractSerializer dcs = new DataContractSerializer(typeof(List<CTransaction>)); 
      ret = dcs.ReadObject(stream) as List<CTransaction>; 
     } 
     } 
    } 
    } 
    catch (Exception ex) 
    { 
    // handle exception 
    } 
} 

public void SaveToIsolatedStorage(List<CTransaction> listToSave) 
{ 
    var store = IsolatedStorageFile.GetUserStoreForApplication(); 
    if (store.FileExists("saver")) 
    { 
    store.DeleteFile("saver"); 
    } 
    using (var stream = new IsolatedStorageFileStream("saver", FileMode.OpenOrCreate, FileAccess.Write, store)) 
    { 
    DataContractSerializer dcs = new DataContractSerializer(typeof(List<CTransaction>)); 
    dcs.WriteObject(stream, ctransactionList); 
    } 
} 
+0

感謝您的回報。但我無法完全確定要做什麼。哪一個適用於Load,哪一個適用於保存?你給了我一整塊代碼。我有兩個按鈕,其中一個保存,另一個負載。那麼如何修改它們呢?對不起,我是這些方法的新手。 – ilerleartik 2013-04-24 23:13:09

+0

爲什麼要創建一個像這樣的新列表; List ret = new List ();我想保存在相同類型的ctransactionList。不保存「ret」。 – ilerleartik 2013-04-24 23:23:38

+0

對不起,我錯過了方法簽名,第一個是從孤立存儲加載列表,第二個是保存它。新的ret列表只有在有例外的情況下才會有一個空的初始化列表;)讓我知道是否有什麼不清楚的地方 – steFranceschi 2013-04-24 23:39:18