2012-04-24 27 views
0

我需要將哪些屬性保存到RoamingSettings?我需要將哪些屬性保存到RoamingSettings?

就像我序列化我的數據時,它需要一個DataContractDataMember屬性。我可以序列我的類XML,但我需要它RoamingSettings保存:

roamingSettings.Values["MyType"] = _mytype; 

調試時,我收到此錯誤信息:

不支持

這種類型的數據。
WinRT的信息:錯誤試圖序列的值寫入到應用數據存儲

我想我需要一個屬性,但哪一個?

回答

1

處理這種情況的最佳方法是將對象序列化爲字符串並存儲它。

將存儲的字符串值反序列化爲目標對象。

+0

是啊,謝謝!但我找不到任何異步的方式,我可以做到這一點:/ – 2012-04-24 19:54:25

4

使用正確的StorageFolder ApplicationData.Current.RoamingFolder

public static class RoamingStorage<T> { 

    public static async void SaveData(string filename, T data) 
    { 
     try 
     { 
      StorageFile file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 
      using (IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
      { 
       using (IOutputStream outStream = raStream.GetOutputStreamAt(0)) 
       { 
        DataContractSerializer serializer = new DataContractSerializer(typeof(List<Item>)); 
        serializer.WriteObject(outStream.AsStreamForWrite(), data); 
        await outStream.FlushAsync(); 
       } 
      } 
     } 
     catch (Exception exc) 
     { 
      throw exc; 
     } 
    } 

    public static async System.Threading.Tasks.Task<T> LoadData(string filename) 
    { 
     T data = default(T); 
     try 
     { 
      StorageFile file = await ApplicationData.Current.RoamingFolder.GetFileAsync(filename); 
      using (IInputStream inStream = await file.OpenSequentialReadAsync()) 
      { 
       DataContractSerializer serializer = new DataContractSerializer(typeof(T)); 
       data = (T)serializer.ReadObject(inStream.AsStreamForRead()); 
      } 
     } 
     catch (FileNotFoundException ex) 
     { 
      throw ex; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     return data; 
    } 
} 

例如調用

RoamingStorage<List<Item>>.SaveData(FILENAME,Items); 

List<Item> data = await RoamingStorage<List<Item>>.LoadData(FILENAME); 
相關問題