2012-10-07 2 views
8

私はList<class>のデータを持っています。そして、私はそれを保存し、私のアプリが起動し、それぞれ終了するたびにそれを取得したい。 Windows 8のIsolatedStorage(WP7)に相当するものは?これらの設定を保存するにはどうすればよいですか?Windowsのアプリでリスト<Object>を保存する最良の方法は

StorageFolder folder = ApplicationData.Current.LocalFolder; 

をしてから使用してそこに保存されたファイルを参照します:あなたが使用してアクセスすることができ、アプリのLocalFolderを使用する必要が

窓8で

答えて

8

var fileToGet = await folder.GetFileAsync("nameOfFile.fileType"); 

私は現在、午前私のApps LocalFolderにカスタムオブジェクトのリストを保存しておき、後で再読み込みするプロジェクトでも同様の状況です。

私の解決方法は、リストをXML文字列にシリアル化し、これをApp Folderに保存することでした。あなたがあなたのアプリを再ロードするとき

//assuming you already have a list with data called myList 
await Windows.Storage.FileIO.WriteTextAsync("xmlFile.txt", SerializeListToXml(myList)); 

を今:あなたは、文字列を持っていることを、あなたはそれをテキストファイルを保存してのlocalStorageでこれを置くことができる今

static public string SerializeListToXml(List<CustomObject> List) 
    { 
     try 
     { 
      XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>)); 
      var writer = new StringWriter(); 
      xmlIzer.Serialize(writer, List); 
      System.Diagnostics.Debug.WriteLine(writer.ToString()); 
      return writer.ToString(); 
     } 

     catch (Exception exc) 
     { 
      System.Diagnostics.Debug.WriteLine(exc); 
      return String.Empty; 
     } 

:あなたは私の方法を容易に適合させることができるはずです上記のロードメソッドを使用してLocalStorageからxmlFileを取得し、それを逆シリアル化してListを取得することができます。

再び
string listAsXml = await Windows.Storage.FileIO.ReadTextAsync(xmlFile.txt); 
List<CustomObject> deserializedList = DeserializeXmlToList(listAsXml); 

、あなたのニーズにこれを適応:

public static List<CustomObject> DeserializeXmlToList(string listAsXml) 
    { 
     try 
     { 
      XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>)); 
      XmlReader xmlRead = XmlReader.Create(listAsXml); 
      List<CustomObject> myList = new List<CustomObject>(); 
      myList = (xmlIzer.Deserialize(xmlRead)) as List<CustomObject>; 
      return myList; 
     } 

     catch (Exception exc) 
     { 
      System.Diagnostics.Debug.WriteLine(exc); 
      List<CustomObject> emptyList = new List<CustomObject>(); 
      return emptyList; 
     } 
    } 
5

あなたが保存するためにこのクラスを使用し、負荷の設定ができます。

public static class ApplicationSettings 
{ 
    public static void SetSetting<T>(string key, T value, bool roaming = true) 
    { 
     var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings; 
     settings.Values[key] = value; 
    } 

    public static T GetSetting<T>(string key, bool roaming = true) 
    { 
     return GetSetting(key, default(T), roaming); 
    } 

    public static T GetSetting<T>(string key, T defaultValue, bool roaming = true) 
    { 
     var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings; 
     return settings.Values.ContainsKey(key) && 
       settings.Values[key] is T ? 
       (T)settings.Values[key] : defaultValue; 
    } 

    public static bool HasSetting<T>(string key, bool roaming = true) 
    { 
     var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings; 
     return settings.Values.ContainsKey(key) && settings.Values[key] is T; 
    } 

    public static bool RemoveSetting(string key, bool roaming = true) 
    { 
     var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings; 
     if (settings.Values.ContainsKey(key)) 
      return settings.Values.Remove(key); 
     return false; 
    } 
} 

しかし、あなたは唯一のプリミティブ型を保存して読み込むことができます(ブール、int、文字列など)。これは、XMLや文字列に格納できる別の形式にリストをシリアライズする必要がある理由です。あなたはこれらのメソッドを使用することができますXMLにしてからオブジェクトをシリアル化および逆シリアル化するには、次の

public static string Serialize(object obj) 
{ 
    using (var sw = new StringWriter()) 
    { 
     var serializer = new XmlSerializer(obj.GetType()); 
     serializer.Serialize(sw, obj); 
     return sw.ToString(); 
    } 
} 

public static T Deserialize<T>(string xml) 
{ 
    using (var sw = new StringReader(xml)) 
    { 
     var serializer = new XmlSerializer(typeof(T)); 
     return (T)serializer.Deserialize(sw); 
    } 
} 

Is there a way to store instances of own classes in the ApplicationSettings of a Windows Store app?

も参照してください。
関連する問題