0

WPF アプリケーションの終了時にオブジェクトのリストを保存する WPF アプリケーションを作成しています。システムの起動時にオブジェクトのリストを取得します。最初はすべて正常に動作します。ただし、シリアライゼーション例外が発生する場合があります。例外を取得した後、xml のシリアル化されたファイルを調べました。しかし、xmlファイルが適切に形成されていないために例外がスローされたようです。直したら。それは再びうまくいきました。

public static class IsolatedStorageCacheManager<T>
{
    public static void store(T loc)
    {
        IsolatedStorageFile appStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, null, null);
        using(IsolatedStorageFileStream fileStream=appStore.OpenFile("myFile21.xml",FileMode.OpenOrCreate))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(fileStream, loc);
        }
    }
    public static T retrieve()
    {
        T obj = default(T);
        IsolatedStorageFile appStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, null, null);
        if (appStore.FileExists("myFile21.xml"))
        {
            using (IsolatedStorageFileStream fileStream = appStore.OpenFile("myFile21.xml", FileMode.Open))
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                try
                {
                    obj = (T)serializer.ReadObject(fileStream);
                }
                catch (SerializationException e)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }
        }
        return obj;
    }
}
4

1 に答える 1

0

最初に行うことは、渡されたオブジェクトがDataContractSerializer でサポートされてstoreいる型であることを確認することです。

最も簡単な方法は、すべてのstore通話を自分で確認することです。

検証メソッドを作成することもできますが、他の誰かが実装しているかどうかを確認することもできます。このメソッドは、オブジェクトを検証してloca を返し、System.Diagnostics.Debug.Assert呼び出し内のメソッドbooleanの先頭で呼び出されるため、デバッグ構成でのみ実行されます。ただし、このメソッドは、仕様で言及されているすべてのケースで型 T を検証する必要があり、T がジェネリックである場合は T のパラメーターも検証する必要があるため、非常にトリッキーになる可能性があることに注意してください。storeDataContractSerializer

于 2012-11-15T19:41:54.187 に答える