What is the best way of saving List<Object> in Windows 8 app

前端 未结 2 912
谎友^
谎友^ 2020-12-30 11:48

I have a List of data. And I want to save it and retrieve it every time my app starts and exits respectively. What is the equivalent of Isola

2条回答
  •  天命终不由人
    2020-12-30 12:18

    In windows 8, you have to use the LocalFolder for your app, which you can access using:

    StorageFolder folder = ApplicationData.Current.LocalFolder;
    

    and then reference files saved there by using:

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

    I am currently in a similar situation in a project I am working on, where I want to store a List of custom objects to my Apps LocalFolder and have it reloaded later.

    My solution was to serialize the list to an XML string, and store this in the App Folder. You should be able to adapt my methods:

    static public string SerializeListToXml(List List)
        {
            try
            {
                XmlSerializer xmlIzer = new XmlSerializer(typeof(List));
                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;
            }
    

    Now that you have the string you can save it a text file and put this in LocalStorage:

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

    Now when you load your app again you can use the loading method mentioned above to get the xmlFile from LocalStorage, and then deserialize it to get your List back.

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

    Again, adapt this to your needs:

    public static List DeserializeXmlToList(string listAsXml)
        {
            try
            {
                XmlSerializer xmlIzer = new XmlSerializer(typeof(List));
                XmlReader xmlRead = XmlReader.Create(listAsXml);
                List myList = new List();
                myList = (xmlIzer.Deserialize(xmlRead)) as List;
                return myList;
            }
    
            catch (Exception exc)
            {
                System.Diagnostics.Debug.WriteLine(exc);
                List emptyList = new List();
                return emptyList;
            }
        }
    

提交回复
热议问题