2012-10-07 6 views
8

나는 List<class>의 데이터를 가지고 있습니다. 그리고 앱을 시작하고 종료 할 때마다 저장하고 검색하고 싶습니다. Windows 8에서 IsolatedStorage (WP7)에 해당하는 것은 무엇입니까?이 설정을 저장하려면 어떻게해야합니까? 사용하여 거기에 저장된 파일을 참조하는 다음가장 좋은 저장 방법은 무엇입니까?

StorageFolder folder = ApplicationData.Current.LocalFolder; 

과 :

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

나는 현재 나는 윈도우 8에서

답변

8

, 당신은 당신이 사용하여 액세스 할 수 있습니다 앱의 LocalFolder을 사용해야합니다 비슷한 상황에서 내가 작업하고있는 프로젝트에서 사용자 정의 객체 목록을 Apps LocalFolder에 저장하고 나중에 다시로드하려고합니다.

내 솔루션은 XML 문자열로 목록을 직렬화하고이를 App Folder에 저장하는 것이 었습니다. 당신은 당신에게 당신의 응용 프로그램을 다시로드 할 때

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

을 지금 : 당신이 문자열을 가지고 당신이 그것을 텍스트 파일을 저장하고 로컬 저장이를 넣을 수 있습니다 지금

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을 가져온 다음 목록을 다시 직렬화하여 목록을 다시 가져올 수 있습니다. (

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

그러나 만 저장하고 기본 유형을로드 할 수

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

당신은 저장 및로드 설정이 클래스를 사용할 수 있습니다

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

또, 사용자의 요구에 적응 bool, int, string 등). XML 또는 문자열에 저장할 수있는 다른 형식으로 목록을 serialize해야하는 이유입니다. 직렬화에 개체를 직렬화 및 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?

참조
관련 문제