2013-01-18 78 views
0
class AppDataManager 
{ 
    public static async Task SaveAsync<T>(T data, string fileName) 
    { 
     StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, 
      CreationCollisionOption.GenerateUniqueName); 
     var stream = await file.OpenStreamForWriteAsync(); 
     var serializer = new DataContractSerializer(typeof(T)); 
     serializer.WriteObject(stream ,data); 
     await stream.FlushAsync(); 
    } 

    public static async Task<T> RestoreAsync<T>(string fileNa me) 
    { 
     try 
     { 
      var file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 

      var instream = await file.OpenStreamForReadAsync(); 
      var serializer = new DataContractSerializer(typeof(T)); 
      return (T)serializer.ReadObject(instream); 
     } 
     catch (Exception) 
     { 
      return default(T); 
     } 
    } 
} 


    protected async override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     await AskUserToLocalDataAsync(); 

     if (useLocalData) 
     { 
      SomethingGoesHere = await AppDataManager.RestoreAsync<UserData>(fileName); 
     } 
    } 

代码工作正常,但它只返回一个对象,我想写入多个对象并将其作为observableCollection检索以将其绑定到GridView。 GenerateUniqueName是追加多个对象赖特?序列化多个对象

如何存储它?以及如何检索它?

+2

不要吞下例外 – SLaks

回答

0

创建一个包含属性的类,该属性将保存您的集合。然后序列化该类。

0

我会建议为您的对象创建一个Collection类。

例如一个Widget对象:

[DataContract] 
public class Widget 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public int Value { get; set; } 
} 

然后,您可以做一个WidgetCollection类:

[DataContract] 
public class WidgetCollection 
{ 
    [DataMember] 
    public List<Widget> Widgets { get; set; } 
} 

可序列化/反序列化,通过在WidgetCollection,然后foreach并添加到ObservableCollection<Widget>

此外,将您的IDisposable对象(如IRandomAccessStream)包装在using声明中,以便它们得到正确处置。