Mam dane List<class>
. I chcę go zapisać i pobrać za każdym razem, gdy moja aplikacja zacznie i wychodzi. Co to jest odpowiednik IsolatedStorage
(WP7) w Windows 8. Jak mogę zapisać te ustawienia?Jaki jest najlepszy sposób zapisywania listy <Object> w aplikacji Windows 8 app
Odpowiedz
w systemie Windows 8, trzeba użyć LocalFolder
dla aplikacji, które można uzyskać dostęp przy użyciu:
StorageFolder folder = ApplicationData.Current.LocalFolder;
a następnie odwołać pliki zapisane tam za pomocą:
var fileToGet = await folder.GetFileAsync("nameOfFile.fileType");
Jestem obecnie w podobnej sytuacji w projekcie, nad którym pracuję, w którym chcę przechowywać listę niestandardowych obiektów do mojego LocalFolder Apps i mieć go ponownie załadowane później.
Moje rozwiązanie polegało na serializacji listy do łańcucha XML i zapisaniu jej w folderze aplikacji. Powinieneś być w stanie dostosować swoje metody:
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;
}
Teraz, że masz ciąg można zapisać go do pliku tekstowego i umieścić to w localStorage:
//assuming you already have a list with data called myList
await Windows.Storage.FileIO.WriteTextAsync("xmlFile.txt", SerializeListToXml(myList));
Teraz, kiedy załadować aplikację znowu może użyć metody ładowania wymienionej powyżej, aby pobrać plik xmlFile z LocalStorage, a następnie przekształcić go w postać deserializacyjną, aby odzyskać swoją listę.
string listAsXml = await Windows.Storage.FileIO.ReadTextAsync(xmlFile.txt);
List<CustomObject> deserializedList = DeserializeXmlToList(listAsXml);
Ponownie dostosować do Twoich potrzeb:
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;
}
}
Można użyć tej klasy do przechowywania i ustawienia obciążenie:
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;
}
}
Ale można tylko zapisać i załadować prymitywnych typów (bool, int, string itp.). To dlatego musisz serializować swoją listę do formatu XML lub innego formatu, który może być przechowywany w łańcuchu. Do serializacji i deserializacji obiektu do iz XML można użyć następujących metod:
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);
}
}
Zobacz również Is there a way to store instances of own classes in the ApplicationSettings of a Windows Store app?
- 1. Jaki jest najlepszy sposób zapisywania wpisów w dzienniku zdarzeń?
- 2. Jaki jest najlepszy sposób na skopiowanie listy?
- 3. Odbicie w aplikacji Windows 8 app
- 4. Jaki jest najlepszy sposób przetestowania aplikacji szyny?
- 5. Jaki jest najlepszy sposób wykrywania orientacji w rozszerzeniu aplikacji?
- 6. Jaki jest najlepszy sposób wstrzyknięcia listy w google-guice?
- 7. Jaki jest najlepszy sposób na stopienie listy w wektorze?
- 8. Jaki jest najlepszy sposób filtrowania listy obiektów JSON w JavaScript?
- 9. Strony pop off stos nawigacyjny w aplikacji Windows 8 App
- 10. Jaki jest najlepszy sposób na porównywanie programów w systemie Windows?
- 11. Najlepsza praktyka do zapisywania poufnych danych w systemie Windows 8
- 12. Grupowanie GridView w Windows 8 Metro App
- 13. Dźwięk w tle w Windows 8 App
- 14. Jaki jest najlepszy sposób pisania aplikacji facebook w haskell?
- 15. Jaki jest najlepszy sposób zaplanowania zadania w aplikacji rozruchu wiosennego?
- 16. Jaki jest najlepszy sposób usuwania obiektów z listy
- 17. Jaki jest najlepszy sposób automatyzacji wdrażania usług Windows?
- 18. Jaki jest najlepszy sposób automatyzacji wdrażania systemu Windows Azure?
- 19. Jaki jest najlepszy sposób dla aplikacji C# komunikować UNIX C++ app
- 20. Jaki jest właściwy sposób określenia lokalizacji aplikacji?
- 21. Jaki jest najlepszy sposób na hostowanie aplikacji node.js w systemie Windows?
- 22. Jaki jest najlepszy sposób na próbkowanie/profilowanie aplikacji PyObjC?
- 23. Jaki jest najlepszy sposób wdrożenia pełnego przeszukiwania aplikacji ASP.NET MVC?
- 24. Jaki jest najlepszy sposób na spakowanie aplikacji Ruby on Rails?
- 25. Jaki jest najlepszy sposób tworzenia interaktywnych prototypów aplikacji?
- 26. Windows Phone 8, ustawienia aplikacji nie trwały
- 27. Jaki jest najlepszy sposób symulacji java.lang.Thread?
- 28. Jaki jest najlepszy sposób rejestrowania aktywności użytkowników?
- 29. Najlepszy sposób na uwierzytelnianie przez OAuth w aplikacji WinRT Windows Store App
- 30. Jaki jest najlepszy sposób obsługi wielu działań?