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

コードは正常に動作しますが、返されるオブジェクトは 1 つだけです。複数のオブジェクトを記述し、それを observableCollection として取得して GridView にバインドしたいと考えています。GenerateUniqueName は、複数のオブジェクトを追加することです。

保管方法は?そしてそれを取得する方法は?

4

2 に答える 2

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、適切に破棄されるようにします。

于 2013-01-18T19:13:32.687 に答える
0

コレクションを保持するプロパティを持つクラスを作成します。次に、そのクラスをシリアル化します。

于 2013-01-18T19:07:05.957 に答える