3

このクラスを Windows Phone ApplicationSettings にシリアル化および逆シリアル化しようとしていますが、何らかの理由で、またはプロパティではなく のみItemsが永続化されます。理由についてのアイデアは大歓迎です!TitleLastChanged

クラス:

public class VehicleCollection : ObservableCollection<Vehicle>
{
    public string Title { get; set; }
    public DateTime LastChanged { get; set; }

    public bool HasNoItems { get { return Items.Count == 0; } }

    public VehicleCollection() { }
    public VehicleCollection(string title, DateTime lastChanged)
    {
        Title = title;
        LastChanged = lastChanged;
    }

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        base.OnCollectionChanged(e);
        OnPropertyChanged(new PropertyChangedEventArgs("HasNoItems"));
    }
}

持続ロジック:

    public static bool SavePersistent(string key, object value)
    {
        if (null == value)
            return false;

        var store = IsolatedStorageSettings.ApplicationSettings;
        if (store.Contains(key))
            store[key] = value;
        else
            store.Add(key, value);

        store.Save();
        return true;
    }

    public static T LoadPersistent<T>(string key)
    {
        var store = IsolatedStorageSettings.ApplicationSettings;
        if (!store.Contains(key))
            return default(T);

        return (T)store[key];
    }


編集:動作が明らかなサンプルプロジェクトを作成しました。http://www.fileswap.com/dl/2ar0ygF8w7/

  1. アプリを実行し、静的データが作成されるのを確認します
  2. 「データを保存」を押して、IsolatedStorage に保存します
  3. アプリを閉じて再実行する
  4. 永続化されていないため、両方のコレクションのタイトルが消えるのを確認してください
4

2 に答える 2

0

[これはあなたの質問に対する直接の回答ではありませんが、解決策です。]

すでに JSON.NET などを使用している可能性があります。それを使用してオブジェクトを文字列にシリアル化し、文字列を保存するのはどうですか?

JSON.NET を使用すると、コードは次のように変更されます。

        public static bool SavePersistent(string key, object value)
    {
        if (null == value)
            return false;

        value = JsonConvert.SerializeObject(value);
        var store = IsolatedStorageSettings.ApplicationSettings;
        if (store.Contains(key))
            store[key] = value;
        else
            store.Add(key, value);

        store.Save();
        return true;
    }

    public static T LoadPersistent<T>(string key)
    {
        var store = IsolatedStorageSettings.ApplicationSettings;
        if (!store.Contains(key))
            return default(T);

        return JsonConvert.DeserializeObject<T>((string)store[key]);
    }

とにかく、それはおそらくより良いパフォーマンスを提供します。

于 2013-06-10T07:23:16.940 に答える